各种协议的默认端口号:
- ftp:21、20 (21是控制端口 20是数据端口)
- ssh:22
- telnet:23
- smtp:25
- pop3:110
- http:80
- oracle:1521
- mysql:3306
- dns/tcp/udp:53
- www:80
- https:443
TCP连接的三次握手过程:
- 第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
- 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器 进入SYN_RECV状态;
- 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入 ESTABLISHED状态,完成三次握手。 完成三次握手,客户端与服务器开始传送数据.
位码即tcp标志位,有6种标示:
- SYN(synchronous建立联机)
- ACK(acknowledgement 确认)
- PSH(push传送)
- FIN(finish结束)
- RST(reset重置)
- URG(urgent紧急)
- Sequence number(顺序号码)
- Acknowledge number(确认号码)
- 第一次握手:主机A发送位码为syn=1,随机产生seq number=1234567的数据包到服务器,主机B由SYN=1知道,A要求建立联机;
- 第二次握手:主机B收到请求后要确认联机信息,向A发送ack number=(主机A的seq+1),syn=1,ack=1,随机产生seq=7654321的包
- 第三次握手:主机A收到后检查ack number是否正确,即第一次发送的seq number+1,以及位码ack是否为1,若正确,主机A会再发送ack number=(主机B的seq+1),ack=1,主机B收到后确认seq值与ack=1则连接建立成功。
TCP Client
|
Flags
|
TCP Server
|
1 Send SYN (seq=x)
|
----SYN--->
|
SYN Received
|
2 SYN/ACK Received
|
<---SYN/ACK----
|
Send SYN (seq=y), ACK (x+1)
|
3 Send ACK (y+1)
|
----ACK--->
|
|
x: ISN (Initial Sequence Number) of the Client
|
y: ISN of the Server
|
四次挥手:由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这个原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。
(1)客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送。
(2)服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号。
(3)服务器B关闭与客户端A的连接,发送一个FIN给客户端A。
(4)客户端A发回ACK报文确认,并将确认序号设置为收到序号加1。
- 默认情况下,当调用close( or closesocket)时,如果发送缓冲中还有数据,TCP会继续把数据发送完。
- 发送了FIN只是表示这端不能继续发送数据(应用层不能再调用send发送),但是还可以接收数据。
- 被动关闭端可能会将ACK和FIN合到一起发送,所以这也算不上严格的四次握手—四个报文段。
- 应用层如何知道对端关闭?通常,在最简单的阻塞模型中,当你调用recv时,如果返回0,则表示对端关闭。在这个时候通常的做法就是也调用close,那么TCP层就发送FIN,继续完成四次握手。
- 关闭TCP连接的最后微妙之处在于对Time-Wait状态的需要。TCP规范要求在终止连接时,两端的关闭握手都完成后,至少要有一个套接字在Time-Wait状态保持一段时间。这个要求的提出是由于消息在网络中传输时可能延迟。如果在连接两端都完成了关闭握手后,它们都移除了其底层数据结构,而此时在同样一对套接字地址之间又立即建立了新的连接,那么前一个连接在网络上传输时延迟的消息就可能在新连接建立后到达。由于其包含了相同的源地址和目的地址,旧消息就会被错误地认为是属于新连接的,其包含的数据就可能被错误地分配到应用程序中。
假设一个C向S发送了SYN后无故消失了,那么S在发出SYN+ACK应答报文后是无法收到C的ACK报文的(第三次握手无法完成),这种情况下S一般会重试(再次发送SYN+ACK给客户端)并等待一段时间后丢弃这个未完成的连接,这段时间的长度我们称为SYN Timeout,一般来说这个时间是分钟的数量级(大约为30秒-2分钟);一个C出现异常导致S的一个线程等待1分钟并不是什么很大的问题,但如果有一个恶意的攻击者大量模拟这种情况,S将为了维护一个非常大的半连接列表而消耗非常多的资源----数以万计的半连接,即使是简单的保存并遍历也会消耗非常多的CPU时间和内存,何况还要不断对这个列表中的IP进行SYN+ACK的重试。实际上如果S的TCP/IP栈不够强大,最后的结果往往是堆栈溢出崩溃---即使S的系统足够强大,S也将忙于处理攻击者伪造的TCP连接请求而无暇理睬客户的正常请求(毕竟C的正常请求比率非常之),此时从正常客户的角度看来,S失去响应,这种情况我们称作:服务器端受到了SYN Flood攻击(SYN洪水攻击)。
子网划分:
新建4个机房,每个房间有25台机器,给定一个网络地址空间:192.168.10.0,现在需要将其划分为4个子网
所以主机位数n为:5 相对应的子网需要借3位
确定了子网部分,后面就简单了,前面的网络部分不变,看最后的这8位
得到6个可用的子网地址:全部转换为点分十进制表示
11000000 10101000 00001010 00100000 = 192.168.10.32
11000000 10101000 00001010 01000000 = 192.168.10.64
11000000 10101000 00001010 01100000 = 192.168.10.96
11000000 10101000 00001010 10000000 = 192.168.10.128
11000000 10101000 00001010 10100000 = 192.168.10.160
11000000 10101000 00001010 11000000 = 192.168.10.192
子网掩码:
11111111 11111111 11111111 11100000 = 255.255.255.224
分享到:
相关推荐
Java作为一门广泛使用的编程语言,其面试笔试题涵盖了众多领域,包括基础语法、面向对象、集合框架、多线程、异常处理、IO流、网络编程、数据库操作、设计模式、JVM优化等。以下是对这些知识点的详细阐述: 1. **...
"软件类职位常见笔试题"这个主题涵盖了多种类型的题目,旨在测试候选人在编程、算法、操作系统、网络、数据库等多个方面的知识。以下是对这些常见笔试题型的详细解析: 1. **编程题**:编程题通常要求应聘者用特定...
1. 计算机网络基础知识: - OSI七层模型:开放系统互连参考模型包括物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。每一层都有其特定的功能,如物理层负责物理连接,传输层则处理端到端的数据传输。...
Java面试是评估程序员技术能力的重要环节,而Java面试常见笔试题常常涉及到语言基础、数据结构、算法、多线程、网络、设计模式等多个方面。在准备面试时,深入理解并能够熟练应用这些知识点至关重要。本资源包含的...
【多益网络2013 笔试题】是针对求职者准备的一份资源,包含了2012年和2013年多益网络(一家知名的网络游戏公司)的面试题目。这份资料对于想要进入IT行业,尤其是游戏开发或相关领域的应聘者来说,是一份非常宝贵的...
无论是C++、Java还是Python,百度笔试题通常会考察求职者的编程基础,包括语法、异常处理、面向对象设计原则等。对语言特性的理解和应用能力是衡量一个程序员基本素质的重要指标。 三、计算机网络 网络协议、TCP/IP...
5. 125条常见的java面试笔试题大汇总.pdf:这是一份包含125个JAVA面试和笔试题目的PDF文件,涵盖了基础到高级的JAVA知识,是全面复习的好帮手。 通过以上文件,学习者可以系统性地复习JAVA知识,包括基本语法、面向...
以上是Java常见笔试题的一些关键知识点,涵盖了语言基础、面向对象特性、并发处理、输入输出、反射、泛型等多个方面。熟悉并掌握这些内容对于Java程序员的面试至关重要。在实际解题过程中,考生还需要具备分析问题、...
综上所述,"C/C++常见笔试题"涵盖了C++语言基础、面向对象编程、MFC应用开发以及代码移植的相关知识,是准备IT面试和提高编程技能的重要资源。通过解读书中题目和实践代码移植,可以有效提升在C++和MFC领域的专业...
总结来说,Java基础笔试题涵盖了从基本语法到高级特性的广泛内容,包括类和对象、多线程、Web开发、数据库操作、XML解析、企业级开发、设计模式以及系统层面的知识。理解并熟练掌握这些知识点对于Java程序员来说至关...
【标题】"农行Java笔试题"涉及到的Java知识点涵盖了编程基础、面向对象特性、集合框架、多线程、异常处理、IO流、网络编程、数据库操作等多个领域,这些都是Java程序员必须掌握的核心技能。 首先,从编程基础角度来...
本资料"java基础面试笔试题及其答案"提供了一系列常见的Java面试题及对应的解答,旨在帮助求职者准备面试。 1. **Java基础知识** - **数据类型**:Java有两大类数据类型,基本数据类型(如int、char、boolean)和...
1. **通信基础知识**:作为一家通信公司,中国移动的笔试中往往会涉及到通信技术的基础知识,包括但不限于无线通信、移动通信网络架构、光通信、数据通信等。考生需要对TCP/IP协议栈、GSM、3G、4G、5G网络有基本理解...
【中兴笔试题】主要考察的是应聘者的基础 IT 知识,尤其是计算机科学与技术方面的内容,包括数据结构、数据库管理、操作系统、编程语言(C 和 Java)、网络通信以及软件工程的基本概念。以下是对这些知识点的详细解释...
在名企的C++笔试题中,常见的知识点可能包括: 1. **基本语法**:如变量声明、数据类型、运算符、流程控制语句等。 2. **类与对象**:包括封装、继承、多态等面向对象的基本概念。 3. **模板**:C++中的模板可以...
这份名为“IT常见笔试面试题”的资料,无疑是为毕业生和求职者提供了一个宝贵的准备工具。以下是对这些常见题型的详细解读,希望能帮助你更好地理解和应对IT行业的面试挑战。 一、编程能力 在IT面试中,编程能力是...
Java是一种广泛使用的面向对象的编程语言,其设计目标是...通过这些Java笔试题,你可以检验自己的Java基础知识掌握程度,并针对不足之处进行深入学习和实践。无论是面试还是日常工作,扎实的Java基础都是必不可少的。
【标题】:“华为常见的笔试题实现” 在华为的招聘过程中,笔试环节往往包含技术性较强的题目,特别是对于软件开发职位,Java编程能力是重点考察对象。本资源集合了华为常见的一些上机题,旨在帮助准备进入华为工作...