TCP/IP 三次握手和四次分手

1、TCP报文

image.png

重要的标志我在图中也有标记,重点了解标志位

  • ACK:确认序号有效,为1时表示确认号有效,为0表示报文中不含确认信息,忽略确认号字段。
  • RST:重置连接,当RST=1时,表示出现严重错误,必须释放连接,然后再重新建立
  • SYN:发起一个新连接,SYN=1而ACK=0,表明它是一个连接请求;SYN=1且ACK=1,则表示同意建立一个连接
  • FIN:释放一个连接,FIN为1时,表示数据已经发送完毕,希望释放连接
  • URG:紧急指针,为1时表示紧急指针有效,为0则忽略紧急指针。
  • PSH: 表示强迫数据传输,置1时请求的数据段在接收方得到后就可直接送到应用程序,而不必等到缓冲区满时才传送。对于http来说,多媒体文件,像图片等一般来说比较大,不可能像证书链完全传输完成之后,仅仅在最后一个报文在再通知接收方向上层扔数据。因此我们看到传输过程中每隔一些报文,PUSH字段就设置上了。

2、三次握手和四次分手

image.png

2.1 三次握手

(1) 客户端我们用A表示,服务器端用B表示
(2)前提: A主动打开,B被动打开

第一次握手

客户主动(active open)去connect服务器,并且发送SYN 假设序列号为J,
服务器是被动打开(passive open)

第二次握手

服务器在收到SYN后,它会发送一个SYN以及一个ACK(应答)给客户,
ACK的序列号是 J+1表示是给SYN J的应答,新发送的SYN K 序列号是K

第三次握手

客户在收到新SYN K, ACK J+1 后,也回应ACK K+1 以表示收到了,
然后两边就可以开始数据发送数据了

2.2 四次分手

由于TCP连接时是全双工的,因此每个方向都必须单独进行关闭.这一原则是当一方完成数据发送任务后,发送一个FIN来终止这一方向的链接。收到一个FIN只是意味着这一方向上没有数据流动,既不会在收到数据,但是在这个TCP连接上仍然能够发送数据,知道这一方向也发送了FIN,首先进行关闭的一方将执行主动关闭,而另一方则执行被动关闭。
前提:A主动关闭,B被动关闭

CP的连接的拆除需要发送四个包,因此称为四次挥手(four-way handshake)。客户端或服务器均可主动发起挥手动作,在socket编程中,任何一方执行close()操作即可产生挥手操作。

第一次分手

客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送。

第二次分手

服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号。

第三次分手

服务器B关闭与客户端A的连接,发送一个FIN给客户端A。

第四次分手

客户端A发回ACK报文确认,并将确认序号设置为收到序号加1。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容