1..在TCP/IP 协议簇中,传输层协议主要有两个:TCP、UDP 2.TCP:传输控制协议,传输速度慢,安全性高 UDP:用户数据报协议,传输速度快,安全性低。 3.TCP---传输控制协议,它是面向连接的、可靠的的协议,提供全双工服务。 4.TCP将若干个字节构成一个分组,称为报文段。 TCP的报文段封装在IP数据包中 3.TCP报文段的首部格式 上图所示为TCP报文段的首部,其中的参数分别是: (1)源端口号:发送者的端口号 (2)目标端口号:接收者的端口号 (3)序号:发送数据时会给每个报文段的第一个字节一个随机数X作为编号, 保证数据的正确性。同时,编号相互独立。 (4)确认号:接收者收到报文后,用来告诉发送者我已经收到。X+1 (5)URG----FIN属于控制位,TCP的连接、断开、传输都受其控制 ①URG:与后面的额16位紧急指针配合使用,当URG=1时,生效。 ②ACK:确认位。当ACK=1时,生效;当ACK=0时,无效。 ③PSH:当PSH=1时,需要接收者尽快把数据段送到应用层。 ④RST:当RST=1时。表示重新请求建立TCP连接 ⑤SYN:需要建立连接时,SYN=1。 ⑥FIN :需要断开连接时,FIN=1。


上述内容是对TCP报文段的初步介绍; 接下来是TCP连接的三次握手,断开连接时的四次握手。 假设:A为客户端,B为服务端。 TCP三次握手

(1)A向B发送的报文段:请求连接SYN=1,随机序号Seq=X; A从CLOSED进入SYN_SEND状态,等待B的确认。 B从CLOSED转换到LISTEN状态

(2)①B收到A的报文段后发送报文段:确认位ACK=1(Seq=X+1); 随机序号=Y,请求建立连接SYN=1; B从LISTEN状态转换到SYN_RECV状态,

(3)A收到B的报文段后发送报文段:确认位ACK=1(Seq=Y+1); ** A和B进入Established状态。开始传输。** 就像两个人初次见面:A说你好能交个朋友吗;B听见后回了声你好,并伸出手准备握手;A看见B伸手,也伸出手和B握在一起。 A向B发出请求连接报文,报文是包含一个随机序号(X)的SYN。 B收到后会发送一次报文,实现两次操作: 一个是表示完整收到的确认序列号,该序列号为X+1,这个1其实是ACK=1;另一个是请求连接的报文,包含一个随机序号(Y)的SYN。 A向B回复一个确认序列号,该序列号为Y+1,这个1也是ACK=1。

TCP四次握手: (1)A向B发送报文段:请求断开连接FIN=1,ACK=1; A此时处于FIN_WAIT_1状态。 (2)B向A发送报文段:ACK=1; B此时处于CLOSE_WAIT状态,等待数据传输的完成; A此时处于FIN_WAIT_2状态。 (3)B向A发送报文段:请求断开连接FIN=1,ACK=1; B此时处于LAST_ACK状态。 (4)A向B发送报文段:ACK=1; A此时处于TIME_WAIT状态,等待30S后处于CLOSED状态; B此时处于CLOSED状态。 “好比两个人面对面告别:A说我走了;B点头确认,并说我也要走了;A确认点头,随后两人转身离开。” A向B提出请求断开连接,B发送报文表示收到,但此时的数据可能没有传输完,如果此时直接断开的话就是传输失败。所以只有当B把数据传输完,再向A发出断开请求连接,A确认。这才是一个完整的数据传输过程。

============================ 总结一下客户端与服务端的状态的变化: (1)客户端的变化: CLOSED-->SYN_SEND-->ESTABLISHED-->FIN_WAIT1-->FIN_WAIT2-->TIME_WAIT-->CLOSED; (2)服务端的变化: CLOSED-->LISTEN-->SYN_RECV-->ESTABLISHED-->CLOSED_WAIT-->LAST_ACK-->CLOSED。