TCP首部的数据格式

其中,

  • 源端口号和目的端口号各占16位,端口范围1~65535。1024以下为知名端口,1024~65535是供用户使用。源端口,目的端口,源ip,目的ip这四个值唯一确定一个TCP连接。
  • 序号是标识从TCP发送端向接收端发送的数据字节流,它表示在这个报文段中的第一个数据字节。
  • 确认序号包含发送确认的一端所期望收到的下一个序号,因为确认序号是上次已成功接收的数据字节序号加1。
  • URG:紧急标志位,紧急指针有效。
  • ACK:确认标志位,对已接收的数据包进行确认。
  • PSH:推送标志位,接收方应尽快将这个报文段交给应用层。
  • RST:重置标志位,重新建立连接。
  • SYN:同步标志位,发起一个连接。
  • FIN:完成标志位,完成发送,关闭连接。

TCP三次握手建立连接

握手示意图如下:

wireshark抓包握手过程:

一开始客户端和服务器都处于CLOSED状态,主动建立连接的一方为客户端,被动建立连接的一方是服务器。双方在建立连接前,需要分配内存建立传输控制块TCB,服务器随后会进入LISTEN监听状态。

第一次握手:客户端向服务器发起连接请求报文,同步标志位SYN=1,初始序列号seq=x,随后客户端进入进入SYN-SEND状态。

第二次握手:服务器端收到请求报文后,向客户端发送确认报文,报文中同步标志位SYN=1,确认标志位ACK=1,确认序号ack=x+1,同时产生一个随机序号seq=y,随后服务器进入SYN_RCVD状态。

第三次握手:客户端收到服务器回的确认后,也要给服务器回复一个确认报文,其中ACK=1,ack=y+1,seq=x+1。服务器收到后,检查ACK是否为1,seq是否为y+1,如果正确则成功建立连接。

建立连接后,客户端和服务器都进入ESTABLISHED状态。之后即可进行正常的数据通信。

TCP四次挥手释放连接

 握手示意图如下:

wireshark抓包挥手过程:

第一次挥手:客户端发送释放连接报文,同时停止数据发送,FIN标志位置1,序列号seq=x,之后客户端进入FIN-WAIT-1状态。
第二次挥手:服务器收到客户端发来的释放连接报文,回复确认报文,ACK=1,ack=x+1,同时序列号seq=y,之后服务器端进入CLOSE-WAIT状态。
第三次挥手:客户端收到服务器的确认后,进入FIN-WAIT-2状态等待服务器方发送释放连接的报文,当服务器将所以数据发送完成后,发送释放连接报文,其中FIN=1,ACK=1,seq=u,ack=x+1,之后服务器进入LAST-ACK状态。
第四次挥手:客户端收到服务器的发送的释放连接报文,会发出确认报文,ACK=1,ack=u+1,seq=x+1,此时客户端进入TIME-WAIT状态。服务器收到客户端的确认报文后就关闭连接。此时,客户端需要等待2MSL的时间,如果在2MSL时间后客户端没有收到服务器的回复,证明服务端已经正常关闭,那么客户端也可以关闭连接。
 
MSL:报文段最大生存时间,是任何报文段被丢弃前在网络上的最长时间。(RFC793定义MSL为2分钟)
 
四次挥手过程中,最后要等待2MSL的原因:
保证客户端回复给服务端的确认报文能够成功到达,因为客户端并不知道发出的确认报文能否被服务器准确的接收到,假如服务器没有成功接收,服务器端会重新发起一个FIN,客户端收到后会再次重新发送确认报文继续给服务器进行一个确认,如果此时客户端已经处于CLOSED状态,那么重新发起的FIN就找不到对应的连接导致失败。因此客户端发送完最后的确认报后不能直接进入CLOSED,而是进入等待状态以确保最后能够正确关闭连接。(在2MSL时间内,该连接的端口不能被使用,比如建立一个连接后用同样的端口再次建立连接,会出现端口不可用的情况)
 
 

TCP/IP协议---三次握手和四次挥手的更多相关文章

  1. TCP/IP协议三次握手和四次挥手大白话解说

    前言 昨天晚上被一位师傅问到了TCP/IP的工作机制,心里很清楚三次握手,然而对于四次挥手却忘了,这是大学习里学过的,奋而翻阅书籍和网络对之前所学的做一个温顾,算是夯实自我吧. TCP(Transmi ...

  2. 白话解说TCP/IP协议三次握手和四次挥手

    白话解说TCP/IP协议三次握手和四次挥手 1.背景 和女朋友异地恋一年多,为了保持感情我提议每天晚上视频聊天一次. 从好上开始,到现在,一年多也算坚持下来了. 1.1.问题 有时候聊天的过程中,我的 ...

  3. TCP/IP协议 三次握手与四次挥手

    一.TCP报文格式 TCP/IP协议的详细信息参看<TCP/IP协议详解>三卷本.下面是TCP报文格式图: 图1 TCP报文格式 上图中有几个字段需要重点介绍下:        (1)序号 ...

  4. TCP/IP协议 三次握手与四次挥手【转】

    一.TCP报文格式 TCP/IP协议的详细信息参看<TCP/IP协议详解>三卷本.下面是TCP报文格式图: 图1 TCP报文格式 上图中有几个字段需要重点介绍下:        (1)序号 ...

  5. 大白话解说TCP/IP协议三次握手和四次挥手

    背景 和女朋友异地恋一年多,为了保持感情我提议每天晚上视频聊天一次. 从好上开始,到现在,一年多也算坚持下来了. 问题 有时候聊天的过程中,我的网络或者她的网络可能会不好,视频就会卡住,听不到对方的声 ...

  6. TCP/IP协议三次握手_四次挥手

    TCP/IP协议 TCP是一种面向连接的端到端的可靠传输协议. TCP报头格式 三次握手的过程 一.客户端发送一个连接请求,发送一个随机数X,这时客户端的端口状态变为SYN_SENT状态. 二.服务端 ...

  7. TCP/IP协议三次握手与四次挥手

    一.标志位和序号 seq序号 :发送方随机生成的 ack确认序号:ack=seq+1 标志位ACK=1时确认序号有效 SYN标志位:发起一个新连接 ACK标志位:确认序号有效 FIN标志位:断开连接 ...

  8. TCP/IP协议三次握手与四次握手流程解析

    原文链接地址:http://www.2cto.com/net/201310/251896.html TCP/IP协议三次握手与四次握手流程解析 TCP/IP协议的详细信息参看<TCP/IP协议详 ...

  9. TCP/IP协议三次握手与四次握手流程解析(转载及总结)

    原文地址:http://www.2cto.com/net/201310/251896.html,转载请注明出处: TCP/IP协议三次握手与四次握手流程解析 一.TCP报文格式  TCP/IP协议的详 ...

  10. TCP/IP协议三次握手与四次握手

    TCP/IP协议三次握手与四次握手流程解析 一.TCP报文格式  TCP/IP协议的详细信息参看<TCP/IP协议详解>三卷本.下面是TCP报文格式图:图1 TCP报文格式  上图中有几个 ...

随机推荐

  1. 文心一言 VS 讯飞星火 VS chatgpt (83)-- 算法导论8.1 4题

    四.用go语言,假设现有一个包含n个元素的待排序序列.该序列由 n/k 个子序列组成,每个子序列包含k个元素.一个给定子序列中的每个元素都小于其后继子序列中的所有元素,且大于其前驱子序列中的每个元素. ...

  2. datetime获取当前日期前十二个月份

    from dateutil.parser import parse from dateutil.relativedelta import relativedelta # 当前日期前十二个月 time_ ...

  3. Frida环境配置

    目录 安装Linux客户端 配置Android服务端 测试运行效果 官方手册 安装Linux客户端 github地址:https://github.com/frida/frida pip instal ...

  4. CF 下分记录

    7.27 edu152 \(+173=2048\) B 没细看数据范围 WA 了一次 D 没判 \(i-1=0\) WA 了一次 E. Max to the Right of Min 考虑增大右端点, ...

  5. Vue框架快速上手

    Vue基础 vue指令 内容绑定 v-text 设置标签的内容一般通过双大括号的表达式{{ }}去替换内容 {{ hello }} v-html 与v-text类似区别在于html中的结构会被解析为标 ...

  6. C#学习笔记--变量类型的转换

    变量类型的转化: 转换原则 同类型的大的可以装小的,小类型的装大的就需要强制转换. 隐式转换: 同种类型的转换: //有符号 long-->int-->short-->sbyte l ...

  7. 算法解析:LeetCode——机器人碰撞和最低票价

    摘要:本文由葡萄城技术团队原创.转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 机器人碰撞 问题: 现有 n 个机器人,编号从 1 开始,每个机器人包含在路 ...

  8. python---简单最大类间方差法(OTSU)算法

    from matplotlib import pyplot as plt # cv2.imread()用于读取图片文件 # imread函数有两个参数,第一个参数是图片路径,第二个参数表示读取图片的形 ...

  9. Iksevi 题解

    Iksevi 题目大意 \(n\) 次询问,每次给定一个点 \((x,y),x\ge 0, y\ge 0\),问有多少种对角线长为偶数的正方形使得在用该正方形正密铺第一象限的情况下该点位于正方形顶点上 ...

  10. Redis平台-整合PHP

    1.Redis的相关介绍: 定义: redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合 ...