计算机网络传输层之TCP协议(tcp协议特点、tcp报文段首部格式、tcp连接建立---三次握手、tcp连接释放---四次握手)
文章转自:https://blog.csdn.net/weixin_43914604/article/details/105516090
学习课程:《2019王道考研计算机网络》
学习目的:利用最省时间的方法学习考研面试中的计算机网络。
1、TCP协议特点


2、TCP报文段的首部格式
TCP传送的数据单元称为报文段。一个TCP报文段分为TCP首部和TCP数据两部分,整个TCP报文段作为IP数据报的数据部分封装在IP数据报中- 其首部的前20B是固定的。TCP报文段的首部最短为20B,后面有4N字节是根据需要而增加的选项,通常长度为4B的整数倍。
- TCP报文段既可以用来运载数据,又可以用来建立连接、释放连接和应答。

- 1)
源端口和目的端口字段。各占2B。端口是运输层与应用层的服务接口,运输层的复用和分用功能都要通过端口实现。 - 2)
序号字段。占4B。TCP是面向字节流的(即TCP传送时是逐个字节传送的),所以TCP连接传送的数据流中的每个字节都编上一个序号。序号字段的值指的是本报文段所发送的数据的第一个字节的序号。

- 3)
确认号字段。占4B,是期望收到对方的下一个报文段的数据的第一个字节的序号。若确认号为N,则表明到序号N- 1为止的所有数据都已正确收到。

- 4)
数据偏移(即首部长度)。占4位,这里不是IP数据报分片的那个数据偏移,而是表示首部长度,它指出TCP报文段的数据起始处距离TCP报文段的起始处有多远。“数据偏移”的单位是32位(以4B为计算单位)。因此当此字段的值为15时,达到TCP首部的最大长度60B.

- 5)
保留字段。占6位,保留为今后使用,但目前应置为0,该字段可以忽略不计。 - 6)
紧急位URG。URG= 1时,表明紧急指针字段有效。它告诉系统报文段中有紧急数据,应尽快传送(相当于高优先级的数据)。但URG需要和紧急指针配套使用,即数据从第一个字节到紧急指针所指字节就是紧急数据。

- 7)
确认位ACK。只有当ACK= 1时确认号字段才有效。当ACK=0时,确认号无效。TCP规定,在连接建立后所有传送的报文段都必须把ACK置1。 - 8)
推送位PSH (Push)。 接收TCP收到PSH= 1的报文段,就尽快地交付给接收应用进程而不再等到整个缓存都填满后再向上交付。

- 9)
复位位RST (Reset)。RST=1时,表明TCP连接中出现严重差错(如主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接。 - 10)
同步位SYN。同步SYN= 1表示这是一个连接请求或连接接收报文。当SYN=1, ACK=0时,表明这是一个连接请求报文,对方若同意建立连接,则在响应报文中使用SYN=1, ACK=1。即SYN= 1表示这是一个连接请求或连接接收报文。

- 11)
终止位FIN (Finish)。用来释放一个连接。FIN= 1表明此报文段的发送方的数据已发送完毕,并要求释放传输连接。 - 12)
窗口字段。占2B。它指出现在允许对方发送的数据量,接收方的数据缓存空间是有限的,因此用窗口值作为接收方让发送方设置其发送窗口的依据,单位为字节。
例如,假设确认号是701,窗口字段是1000。这表明,从701号算起,发送此报文段的接收方方还有接收1000B数据(字节序号为701 ~1700)的接收缓存空间。

- 13)
检验和。占2B。校验和字段检验的范围包括首部和数据两部分。在计算检验和时,和UDP一样,要在TCP报文段的前面加上12B的伪首部(只需将UDP伪首部的第4个字段,即协议字段的17改成6,其他的和UDP一样)。 - 14)
紧急指针字段。占16 位,指出在本报文段中紧急数据共有多少字节(紧急数据放在本报文段数据的最前面)。

15)选项字段。长度可变。TCP最初只规定了一种选项,即最大报文段长度(Maximum SegmentSize,MSS)。MSS是TCP报文段中的数据字段的最大长度。窗口扩大、时间戳、选择确认。
16)填充字段。这是为了使整个首部长度是4B的整数倍。填充0。
3、TCP连接管理
- TCP是面向连接的协议,因此每个TCP连接都有三个阶段:
连接建立、数据传送和连接释放。 TCP连接的管理就是使运输连接的建立和释放都能正常进行。
在TCP连接建立的过程中,要解决以下三个问题:
- 1)要使每一方都能够确知对方的存在。
- 2)要允许双方协商一些参数(如最大窗口值、是否使用窗口扩大选项、时间戳选项及服务质量等)。
- 3)能够对运输实体资源( 如缓存大小、连接表中的项目等)进行分配。
每条TCP连接通过通信两端的两个端点( 即两个套接字)确定。

(1)TCP连接的建立 - - - 三次握手
- seq为
序号字段,标明本次报文段数据部分的第一个字节的序号 - ack是
确认号字段,告诉对方我接下来应该接收的数据是从字节序号ack开始的数据 - ACK是
确认位,0时确认号字段ack无效,1时确认号字段ack有效 - SYN是
同步位

- 第一步:客户机的TCP首先向服务器的TCP发送一个连接请求报文段。这个特殊的报文段中不含应用层数据,其首部中的SYN标志位被置为1。另外,客户机会随机选择一个起始序号 seq= x(连接请求报文不携带数据,但要消耗一个序号)。
- 第二步:服务器的TCP收到连接请求报文段后,如同意建立连接,就向客户机发回确认,并为该TCP连接分配TCP缓存和变量。在确认报文段中,SYN和ACK位都被置为1,确认号字段的值为x+ 1, 并且服务器随机产生起始序号seq = y(确认报文不携带数据,但也要消耗-一个序号)。确认报文段同样不包含应用层数据。
- 第三步:当客户机收到确认报文段后,还要向服务器给出确认,并且也要给该连接分配缓存和变量。这个报文段的ACK标志位被置1,序号字段为x+1,确认号字段ack=y+ 1。该报文段可以携带数据,若不携带数据则不消耗序号。
成功进行以上三步后,就建立了TCP连接,接下来就可以传送应用层数据。
TCP提供的是全双工通信,因此通信双方的应用进程在任何时候都能发送数据。
- 服务器端的资源是在完成第二次握手时分配的
- 而客户端的资源是在完成第三次握手时分配的,这就使得服务器易于受到SYN洪泛攻击。
(2)SYN泛洪攻击

4、TCP连接的释放----四次握手
- 天下没有不散的筵席,TCP同样如此。参与TCP连接的两个进程中的任何一个都能终止该连接。TCP连接释放的过程通常称为四次握手


- 第一步:客户机打算关闭连接时,向其TCP发送一个连接释放报文段, 并停止发送数据,主动关闭TCP连接,该报文段的FIN标志位被置1,
seq=u, 它等于前面已传送过的数据的最后一个字节的序号加1(FIN报文段即使不携带数据,也要消耗一个序号)。
TCP 是全双工的,即可以想象为一条TCP连接上有两条数据通路。
发送FIN报文时,发送FIN的一端不能再发送数据,即关闭了其中一条数据通路,但对方还可以发送数据。 - 第二步:服务器收到连接释放报文段后即发出确认,
确认号是ack=u+ 1,而这个报文段自己的序号是v,等于它前面已传送过的数据的最后一个字节的序号加1。
此时,从客户机到服务器这个方向的连接就释放了,TCP连接处于半关闭状态。
但服务器若发送数据,客户机仍要接收,即从服务器到客户机这个方向的连接并未关闭。 - 第三步:若服务器已经没有要向客户机发送的数据,就通知TCP释放连接,此时其
发出FIN= 1的连接释放报文段。 - 第四步:
客户机收到连接释放报文段后,必须发出确认。在确认报文段中,ACK字段被置为1,确认号ack=w+1,序号seq=u+1.此时TCP连接还未释放,必须经过时间等待计时器设置的时间2MSL后,A才进入连接关闭状态。
5、TCP连接建立和释放的总结
- 1)建立连接。分为3步:
①SYN=1,seq=x。
②SYN=1, ACK=1, seq=y, ack=x+ 1。
③ACK=1,seq=x+1, ack=y+ 1。 - 2)释放连接。分为4步:
①FIN=1, seq= u
②ACK=1, seq=v, ack=u+ 1。
③FIN=1,ACK=1, seq=w,ack=u+ 1。
④ACK=1, seq=u+1, ack=w+ 1。
关于连接和释放,ACK、 SYN、 FIN 一定等于1
计算机网络传输层之TCP协议(tcp协议特点、tcp报文段首部格式、tcp连接建立---三次握手、tcp连接释放---四次握手)的更多相关文章
- 计算机网络-传输层(1)UDP协议
UDP协议基于Internet IP协议,只提供两个基础功能: 分用/复用 分用:主机接收到IP数据报(datagram),每个数据报携带源IP地址.目的IP地址且携带一个传输层的段(Segment) ...
- TCP报文段首部格式详解
TCP首部格式 格式字段详解 源端口.目标端口: 计算机上的进程要和其他进程通信是要通过计算机端口的,而一个计算机端口某个时刻只能被一个进程占用,所以通过指定源端口和目标端口,就可以知道是哪两 ...
- 计算机网络-传输层(3)TCP协议与拥堵控制
TCP是因特网传输层的面向连接的可靠的运输协议. TCP被称为是面向连接的:通信双方在发送数据之前必须建立连接,连接状态只在连接的两端中维护,在沿途节点中并不维护状态. TCP连接包括:两台主机上 ...
- 计算机网络传输层之TCP流量控制
文章转自:https://blog.csdn.net/weixin_43914604/article/details/105531547 学习课程:<2019王道考研计算机网络> 学习目的 ...
- [计算机网络-传输层] 面向连接的传输:TCP
参考:http://blog.csdn.net/macdroid/article/details/49070185 在学习TCP之前我们先来看一下可靠数据传输需要提供什么样的机制: ·差错检测机制:检 ...
- 第8章 传输层(3)_TCP协议
3. 传输控制协议(TCP) 3.1 TCP协议的主要特点 (1)TCP是面向连接的传输层协议.即使用TCP协议之前必须先建立TCP连接.在传送数据完毕之后,必须释放己经建立的TCP连接. (2)每一 ...
- 计算机网络传输层之TCP拥塞控制(慢开始与拥塞避免、快重传和快恢复)
文章转自:https://blog.csdn.net/weixin_43914604/article/details/105532044 学习课程:<2019王道考研计算机网络> 学习目的 ...
- 第8章 传输层(2)_UDP协议
2. 用户数据报协议(UDP) 2.1 UDP的特点 (1)UDP是无连接的,即发送数据之前不需要建立连接,因此减少了开销和发送数据之前的时延. (2)UDP使用了尽最大努力交付,即不保证可靠交付,因 ...
- [计算机网络-传输层] 无连接传输:UDP
UDP(用户数据报协议) 下面是UDP的报文段格式: 可以看出UDP的首部长度是固定的,共64bit,即8个字节. 校验和:提供了差错检测得功能,即用于确定当UDP报文段从源到达目的时,其中的比特是否 ...
随机推荐
- linux系列之:告诉他,他根本不懂kill
目录 简介 使用kill来杀死进程 kill的深入用法 僵尸进程和kill java thread dump 总结 简介 和很多程序员打过交道,这些程序员可能熟知for遍历的好几种写法,但是却对写出来 ...
- [第十五篇]——Swarm 集群管理之Spring Cloud直播商城 b2b2c电子商务技术总结
Swarm 集群管理 简介 Docker Swarm 是 Docker 的集群管理工具.它将 Docker 主机池转变为单个虚拟 Docker 主机. Docker Swarm 提供了标准的 Dock ...
- 苹果ASA广告投放归因的接入
前段时间,苹果终于在大陆区开放了应用商店的竞价广告.毫无疑问又开启了苹果应用导量的新玩法,各大厂商都紧跟脚步吃螃蟹.本篇讲解苹果广告中的归因部分. 苹果广告其实在海外已运行多年,而因为IDFA的政策变 ...
- 使用Eclipse的基本配置
因本人 IntelliJ IDEA 正版授权前些日子已到期,最近开始使用 Eclipse .体验开发了一阵子,觉得除了在界面美观与前端编辑的操作上 Eclipse 与 IDEA 差距还比较大以外,其他 ...
- 迷宫3---BFS
经过思考蒜头君终于解决了怎么计算一个迷宫的最短路问题,于是蒜头君找到一个新的迷宫图,来验证自己是否真的会计算一个迷宫的最短路. 为了检验自己计算的是否正确,蒜头君特邀你一起来计算. 输入格式 第一行输 ...
- 洛谷P1060——开心的金明
https://www.luogu.org/problem/show?pid=1060 题目描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间他自己专用的很宽敞的房间.更让他高兴的是,妈妈 ...
- 手机UI自动化之显示点触位置(触摸轨迹)
上期回顾:Airtest源码分析--Android屏幕截图方式 不管是用Appium还是Airtest,或是其他手机UI自动化工具,你是不是经常遇到这种情况,代码明明执行了click或swipe,怎么 ...
- Modern PHP interface 接口
The right way /dev/hell Code Response.php 接口 demo: modern-php/├── data│ └── stream.txt└── interfac ...
- Linux python 虚拟环境管理
直接复制的内容: 原著:https://www.cnblogs.com/q767498226/p/11099884.html 报错解决:https://blog.csdn.net/weixin_467 ...
- Java_正则表达式和文本操作
正则表达式语法 普通字符 字母.数字.汉字.下划线.以及没有特殊定义的标点符号,都是"普通字符".表达式中的普通字符,在匹配一个字符串的时候,匹配与之相同的一个字符. 简单的转义字 ...