TCP--三次握手 和 四次分手
来源:互联网 发布:淘宝天天乐游戏商城 编辑:程序博客网 时间:2024/04/29 18:06
首先咱们先来说一下,TCP包的格式,下面附上一张图:
TCP数据包可分为TCP 包头 和 来自应用层的数据 两部分,有6个标志位,即上图中的大写英文字母表示的,具体如下:
URG 紧急指针是否有效ACK 表示确认号是否有效,我们称携带ACK标志的TCP报文段为确认报文段PSH 标志,提示接收端应用程序应该立即从TCP接收区读取数据,为接收数据腾出空间。RST 表示要求对方重新建立连接,称携带RST的TCP报文段为复位报文段。SYN 表示请求建立一个连接,称携带SYN标志的TCP报文段为同步报文段。FIN 表示通知对方本端要关闭连接了。我们称携带FIN标志的TCP报文段为结束段
三次分手
第一次:client发送SYN=1 seq=x到server,server由SYN=1知道client请求连接 第二次:server发送确认信息的包 到 client ack=x+1,SYN=1,ACK=1,seq=y第三次:client 检查ack是否等于x+1,ACK是否等于1,若正确,则发送 ack=y+1,ACK=1 到 server ,server收到后确认则连接成功.seq:顺序序号ack:确认序号seq和ack分别来自TCP首部的序号字段和确认号字段,范围0到2^32-1
四次分手
由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这个原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。
1.client 发送一个 FIN,请求终端与server 的数据连接2.server 收到 FIN后,回复一个ACK 表示确认3.server 关闭与 client 的连接,发送一个FIN 给它4.client 发送一个 ACK报文确认
为什么 3次握手 而 分手是4次 呢?
因为server收到 SYN报文后,可以同时将SYN 和 ACK放到一个报文里来发回去,而关闭连接的时候,client发送一个FIN,仅代表它没有数据要发送到server了,即对方没有数据发送给你,而你未必没有东西发给对方,所以你未必会立刻关闭SOCKET,也许会将数据发送完后再发送FIN报文,再关闭。因此,大多情况下ACK 和 FIN是分开来发的。
有错误请指出,谢谢
1 0
- TCP三次握手和四次分手
- TCP的三次握手和四次分手
- TCP三次握手和四次分手
- TCP的三次握手和四次分手
- TCP--三次握手 和 四次分手
- TCP三次握手和四次分手
- TCP 三次握手,四次分手
- TCP 三次握手四次分手
- TCP三次握手四次分手
- TCP连接——三次握手和四次分手
- TCP恋爱史:三次握手和四次分手
- TCP恋爱史:三次握手和四次分手
- TCP恋爱史:三次握手和四次分手
- TCP恋爱史:三次握手和四次分手
- TCP恋爱史:三次握手和四次分手
- (图解)TCP的三次握手和四次分手
- TCP恋爱史:三次握手和四次分手
- TCP协议的三次握手和四次分手的大白菜
- java instanceof 使用
- 198.leetcode House Robber(easy)[动态规划]
- Python即时网络爬虫项目: 内容提取器的定义(Python2.7版本)
- Android studio 快捷键&配置技巧(不定时更新)
- 7.20 牛客左程云老师第一题(个人学习笔记)
- TCP--三次握手 和 四次分手
- 距离和相似度度量
- iOS 消息推送原理及实现Demo
- Time定时器的使用
- C#之XML基础 xattribute的用法示例
- 关于android 6.0权限问题
- hdu--1811(拓扑排序+并查集)
- POJ-3080-Blue Jeans
- 【9902】挖地雷