TCP的三次握手:

假设A是客户端,B是服务器端
1 . 首先B 处于LISTEN(监听)状态,等待客户端的连接请求
2 . A向B发送请求报文,SYN=1,ACK = 0 ,选择一个初始的序号x。
3 . B收到连接请求报文,如果同意建立连接,则向A发送连接确认报文,SYN = 1,ACK= 1,确认序号为x+1,同时也选择一个初始的序号y。
3 . A收到B的连接确认报文后,还要向B发出确认,确认序号为y+1,序号为x+1.
B收到A的确认后,连接建立
三次握手的原因
第三次握手是为了防止失效的连接请求到达服务器,让服务器错误打开连接。
客户端发送的连接请求如果在网络中滞留,那么就会隔很长的一段时间才能收到服务器端发回的连接确认。客户端等待一个超时重传时间之后,就会重新请求连接。但是这个滞留的连接请求最后还是会到达服务器,如果不进行三次握手,那么服务器就会打开俩个连接,如果有第三次握手,客户端会忽略服务器之后发送的对滞留连接请求的连接确认,因此就不会再次打开连接。
TCP的四次挥手

以下描述不讨论序号和确认序号,因为序号和确认序号的规则比较简单。并且不讨论ACK,因为ACK在连接建立之后都为1.
1 . A发送连接释放报文,FIN = 1;
2 . B收到之后发出确认,此时TCP属于半关闭状态,B能向A发送数据但是A不能向B发送数据
3 .当B不在需要连接时,发送连接释放报文,FIN=1.
4 . A收到后发出确认,进入TIME-WAIT状态,等待2MSL(最大报文存活时间)后释放连接
B收到A的确认后释放连接
四次挥手的原因
客户端发送了 FIN 连接释放报文之后,服务器收到了这个报文,就进入了 CLOSE-WAIT 状态。这个状态是为了让服务器端发送还未传送完毕的数据,传送完毕之后,服务器会发送 FIN 连接释放报文。
TIME_WAIT
客户端接收到服务器端的 FIN 报文后进入此状态,此时并不是直接进入 CLOSED 状态,还需要等待一个时间计时器设置的时间 2MSL。这么做有两个理由:
-
确保最后一个确认报文能够到达。如果 B 没收到 A 发送来的确认报文,那么就会重新发送连接释放请求报文,A 等待一段时间就是为了处理这种情况的发生。
-
等待一段时间是为了让本连接持续时间内所产生的所有报文都从网络中消失,使得下一个新的连接不会出现旧的连接请求报文。
1万+



被折叠的 条评论
为什么被折叠?



