TCP三次握手和四次挥手的详解
此解释参考TCP-IP详解卷1:协议
三次握手
我们先来看看TCP连接到底是什么样的,首先要建立本地和某个主机的联系,可以在unix系统输入如下命令
talnet bsdi discard
然后看看TCP报文输出
这7个TCP报文仅包含首部,不含任何数据,他们的格式统一,都是
源 发送端>接收端:标志
标志中第一个字母或字符的含义如下:
标志位置1或者数据段不为空时,才显示该字段信息
在第一行中,S表示该报文为SYN比特位置1,1415531521:1415531521(0)表示分组序号为1415531521,发送0个数据;win 4096表示滑窗的大小,<mss 1024>表示发送的报文段最大长度选项
第二行中,SYN位置1,ack字段不为空,ack 1415531522表示确认序号,为上一个请求的分组序号+1
第三行中,SYN位此时不置1,所以不显示,ack 1823083522表示确认序号,为上一个请求的分组序号+1
所以总结TCP三次握手的过程为:
1. 请求端(通常是指客户端)发送一个SYN段打算连接服务器上的端口,以及初始序号(ISN,在这个例子中为1415531521),这个SYN段为报文段1
2. 服务器发回包含初始序号的SYN报文段作为应答(报文段2),同时,将确认序号设置为客户的ISN+1
3. 客户端将确认序号设置为服务器的ISN序号+1对服务器的报文做应答(报文段3)
四次挥手
TCP连接是半关闭的,当一端接收到FIN报文时,仍然可以发送数据,必须两端都关闭才结束TCP连接。
同样是上面的图,报文段4发送FIN报文,FIN位置1,为上一次客户端收到的确认序号和上一次他发送的确认序号,然后客户端返回ack,客户端的连接关闭,然后发送FIN报文,客户端收到返回ack,服务器连接关闭
上一篇: TCP三次握手四次挥手详解
下一篇: Recyclerview的用法