网络从底层开始,分为物理层,网络层,传输层和应用层。
其中TCP/UDP就存在于传输层。
1 TCP协议的三次握手机制
就是客户端C向服务端S发出的2次请求+服务端对客户端的1次回应(确认)。不涉及一些具体的数据交互。
SYN:标志位,flag
ACK:标志位,对请求的确认
seq:序列号,随机值,0~2^32,发生冲突的概率是很低的。
ack:确认号,seq+1,批量确认的机制。
1.1 为什么是3次?
-确保双方都有能力发送信息并且接受响应。
-协商得知对方的序列号
第一次握手:C的发送和S的接受是正常的。
第二次握手:C明白自己的发送和接受都是正常的,也明白S的发送和接受都是正常的。
第三次握手:S明白自己的发送和对方的接受是正常的。
1.2 性质及应用
是可靠的面向连接的传输协议,保证数据是正确稳定可靠无差错的传输。
应用:手机转账
2 UDP协议
比较简单,就是客户端向服务端发起的请求request,服务端会返回一堆东西(对应的数据)给客户端,这些都称为reponse。
不涉及到确认的过程。
不可靠无连接的传输协议,UDP协议是尽可能地交付,允许有一定的差错。
应用:视频播放,语音聊天等
TCP固定长度有20个字节,UDP只有8个字节
TCP面向字节流,UDP面向报文的。
3 TCP四次挥手
客户端打算关闭连接的时候,C会发送FIN给服务器S,客户端进入wait1状态。
S收到FIN后会发送ACK确认收到C的关闭连接信息,等S数据处理完机会通知C,S进入closed_wait状态。
C收到S发出的ACK报文后进入wait2状态。
等待服务端S处理完数据后也向C发出FIN报文,告诉对方S这边数据已经处理完毕,可以关闭连接了。S进入last_ack状态。
C收到S的FIN后会回复一个ACK,进入time_wait状态。
S收到ACK之后会进入close状态,至此,服务端已经完成了关闭的连接。
C再经过两倍的MSL时间后会自动进入close状态,至此客户端也完成了连接的关闭。
3.1 为什么需要四次?
三次握手其实是四次,只不过中间的两个步骤合并了。
而四次挥手中,S向C发出ACK报文的时候,可能还有数据需要传输,需要等待数据传输完毕再发一个FIN才行,这个过程不能合并。
3.2 为什么最后C要等待一个两倍的MSL时间而不能直接关闭?
MSL:maximum segment lifetime报文生存的最大时间。
报文经过一来一回刚好是2倍的MSL。
C向S发送ACK,为了确保对方能够收到ACK报文,必须要等待一段时间。
新的连接不会接受过期的数据包。