TCP(传输控制协议详解)详解
TCP协议的特点
(1)TCP协议是面向连接的运输层协议
在数据传输前必须建立连接,数据传输之后释放连接。
(2)TCP提供可靠交付的服务
所谓可靠是指在传输过程中无重复,无丢失,无错误。但是同时会增加开销。
(3)每一条连接都是点对点连接(一对一)
(4)面向字节流
所谓字节流指的是以传输过程中流入进程和流出进程的字节序列,虽然传输过程中是一个一个数据报,但这只是为了方便传输,之后在目的端重新装配。
(5)TCP提供全双工通信
所谓全双工是指一端既可以是客户端,也可以是服务器。
TCP头部有20个固定字节,选项部分长度不定,最多40个字节。
(1)源端口和目的端口:各占2个字节。端口是指传输层和应用层的服务端口。传输层的分用和复用就是通过端口实现的。
分用:在发送端,多个客户端进程公用一个传输层。
复用:在接收端,传输层会根据端口号分配给不同的应用进程。
(2)序号字段:占4个字节。范围是0—2^32-1。因为TCP是面向字节流,所以它为每一个字节进行编号。
(3)确认号:占4个字节,是期望收到下一个报文段的数据部分的第一个序号。
(4)数据偏移:占4个字节。是指TCP报文段的数据开始的部分距TCP报文段起始部分的偏移量。
(5)保留字段:占6个字节。
(6)标识符:
URG:当URG置1时,表示紧急指针有效,它告诉系统此报文段有紧急数据,应尽快传送。
ACK:ACK置1,表示确认号字段才有效。此外,TCP规定,建立连接后,传输的所有报文段的ACK都需要被置1.
PSH:当接收者收到PSH=1时,会立即把数据传输给应用程序,而不会等到缓冲区满了,再做提交。
RST:RST=1,表示TCP连接出现了严重的问题,必须释放重连。
SYN:建立连接的时候使用。
当SYN=1,ACK=0时,表示为请求连接。
当SYN=1,ACK=1时,表示为同意连接的请求应答。
FIN:FIN=1,表示请求释放连接。
(7)窗口:占2个字节,表示接受端的接收窗口的大小。用于实现流量控制。将接收端发送过去的窗口大小设置成发送端的发送窗口大小,从而控制了发送端的发送效率。
(8)校验和:用于检测发送过程中是否出现错误。
(9)紧急指针:用于标识紧急数据的尾部。
(10)选项字段:(需要掌握的几个选项)MMS—最大报文长度,实际是报文段的最大数据长度。窗口扩大因子。时间戳选项。
TCP可靠传输技术
TCP提供的可靠传输而使用的方式是序号,确认号,超时重传,滑动窗口等可靠传输机制。
流量控制:
防止发送端发送数据过快,接收端无法接收。
假设A收到B应答的窗口大小为20个字节,确认号字段为31,据悉,A所构造的发送窗口。
A发送11个字节
假设B收到了31号数据,把31—33交付给主机,然后B删除这些数据。A收到新的确认号为34.
A继续发送42-53.A的窗口已经发完但是没有确认,所以停止发送。
持续计时器
为了避免流量控制引发的死锁,TCP使用了持续计时器。当连接的一方收到窗口大小为0,则启动持续计时器,若设置的持续计时器的时间已到,则发送一个窗口探测报文段。如果窗口值还为0,则持续等待,当不为0,则证明报文段丢失,则重新发送,打破死锁。
TCP的三次握手
开始的时候,客户端和服务器端分别创建自己的传输控制块(TCB),创建完后server进入Listen状态,此时准备接受client发送的请求。
第一次握手:客户端向服务器端发送连接请求。
SYN=1,ACK=0表示请求连接。
X表示本次字节流的初始序号。
TCP规定:此时没有数据传输,但是消耗一个序号。
第二次握手:服务器向客户端发生应发响应。
SYN=1,ACK=0表示同意连接的应答响应。
Y表示本次字节流的初始序号。
X+1表示希望收到的字节起始序号。
第三次握手:当客户端收到连接同意的应答后,还要向服务端发送一个确认报文段,表示:服务端发来的连接同意应答已经成功收到。
该报文段的头部为:ACK=1,seq=x+1,ack=y+1。
客户端发完这个报文段后便进入ESTABLISHED状态,服务端收到这个应答后也进入ESTABLISHED状态,此时连接的建立完成!
为什么连接只需要三次握手,而不是两次握手?
当客户端接收到应答响应是,就会进入estabished状态,而服务器端只有收到客户端的连接请求后才会进入estabished状态。
此时如果网络拥塞,客户端发送的连接请求迟迟到不了服务端,客户端便超时重发请求,如果服务端正确接收并确认应答,双方便开始通信,通信结束后释放连接。此时,如果那个失效的连接请求抵达了服务端,由于只有两次握手,服务端收到请求就会进入ESTABLISHED状态,等待发送数据或主动发送数据。但此时的客户端早已进入CLOSED状态,服务端将会一直等待下去,这样浪费服务端连接资源。
TCP四次挥手
第一次挥手:A已经发送完数据,请求释放连接,只发送报文头,此时A进入FIN_WAIT状态。
FIN=1,表示释放连接。
seq=u,u-1表示确认的最后一个数据序号。
第二次挥手:B收到连接释放请求之后,会告诉它A到B这个方向已经释放。B向A发送应答响应,B进入CLOSE_WAIT状态。
ACK=1:除TCP连接请求报文段以外,TCP通信过程中所有数据报的ACK都为1,表示应答。
seq= v:v-1是B向A发送的最后一个字节的序号。
ack=u+1表示希望收到从第u+1个字节开始的报文段,并且已经成功接收了前u个字节。
第三次挥手:当B向A发完所有数据后,向A发送连接释放请求,请求头:FIN=1,ACK=1,seq=w,ack=u+1。
B便进入LAST-ACK状态。
第四次挥手:A收到释放请求后,向B发送确认应答,此时A进入TIME-WAIT状态。
该状态会持续2MSL时间,若该时间段内没有B的重发请求的话,就进入CLOSED状态,撤销TCB。当B收到确认应答后,也便进入CLOSED状态,撤销TCB。
TCP(传输控制协议详解)详解相关推荐
- TCP 传输控制协议(转)
开头先说几个协议: IP:网际协议 TCP:传输控制协议 Http:超文本传输协议 AMQP:高级消息队列协议 一:TCP是什么? TCP(Transmission Control Protocol ...
- TCP 传输控制协议(Transmission Control protocol)
TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的.可靠的.基于字节流的通信协议,数据在传输前要建立连接(三次握手),传输完毕后还要断开连接(四次挥手) ...
- 传输控制协议---TCP协议【详解】
目录 一.协议简介 二.TCP报文格式 1.字段解析 2.报文解析 三.TCP的重传机制 1.超时重传 2.快速重传 3. SACK 方法 4.Duplicate SACK 四.TCP的滑动窗口机制 ...
- TCP/IP协议簇分层详解---转
http://blog.csdn.net/hankscpp/article/details/8611229 一. TCP/IP 和 ISO/OSI ISO/OSI模型,即开放式通信系统互联参考模型(O ...
- TCP丢包检测技术详解
TCP丢包检测技术详解 http://www.cctime.com/html/2007-12-6/20071261023151210.htm 2007年12月6日 10:23 中 ...
- 网络基础知识-TCP/IP协议各层详解
TCP/IP简介 虽然大家现在对互联网很熟悉,但是计算机网络的出现比互联网要早很多. 计算机为了联网,就必须规定通信协议,早期的计算机网络,都是由各厂商自己规定一套协议,IBM.Apple和Micro ...
- 经典面试题之 TCP三次握手 和 TCP四次挥手过程----详解
TCP三次握手过程: 第一次握手:建立连接时,客户端发送syn包(seq=j)到服务器,并进入SYN_SENT状态,等待服务器确认:SYN:同步序列编号(Synchronize Sequence Nu ...
- TCP/IP协议分层模型详解
文章目录 不同分类模型对应关系 不同人员关注的模型不一样 每层的简述 物理层 数据链路层 网络层 传输层 会话层 表示层 应用层 数据包传输过程 数据包传输调用关系 数据包发送 数据包接收 各层协议 ...
- TCP报文段首部格式详解
TCP首部格式 格式字段详解 源端口.目标端口:计算机上的进程要和其他进程通信是要通过计算机端口的,而一个计算机端口某个时刻只能被一个进程占用,所以通过指定源端口和目标端口,就可以知道是哪两个进程需要 ...
- 对tcp三次握手的详解之 理解TCP序列号(Sequence Number)和确认号(Acknowledgment Number)
重要 !!!!!!!!! 转载自[怀揣梦想,努力前行] 对tcp三次握手的详解之 理解TCP序列号(Sequence Number)和确认号(Acknowledgment Number) ...
最新文章
- display的block、none、inline属性及解释
- 每日站会要关注团队目标-Scrum中文网
- win10子系统ubuntu文件夹位置_win10子系统(WSL)自定义安装路径
- 跨年之际,中文版畅销书《TensorFlow深度学习实战大全》分享,直接送!
- 对冲基金BKCM LLC创始人看涨BCH
- spring中的RowMapper
- Win7下面安装SQL Server2005
- 【AI研究院】360无死角认识一下女神的线上美容院-“美图秀秀”
- android 上下滚动文字_android高仿今日头条富文本编辑(发布文章)
- 均值滤波、中值滤波、混合中值滤波C++源码实例
- unix系统编码 java_JAVA字符编码系列三:Java应用中的编码问题
- 动态随机存储器的刷新(集中刷新、分散刷新、异步刷新的区别)
- Nacos,阿里开源,是真的香!!
- odoo10参考系列--ORM API 一(记录集、环境、通用方法和创建模型)
- 成都Uber优步司机奖励政策(3月28日)
- 比较贵的计算机配置,什么电脑配置好 几款配置比较豪华的笔记本电脑推荐【图文】...
- secure CRT 信号灯超时时间已到
- camtasia2018-2019-2020下载安装激活码教程,永久免费版
- Dreamweaver 网页设计作业静态模板
- HNU JAVA 导弹防御系统