概述
1. TCP的定义
TCP提供一种面向连接的、可靠的字节流服务。
面向连接: 两个使用TCP的应用(通常是一个客户和一个服务)在彼此交换数据之前必须建立一个TCP连接。
TCP提供可靠性的方式:
1)应用数据被分割成TCP认为最适合发送的数据块;
2)当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段;
3)当TCP收到来自TCP连接另一端的数据,它将发送一个确认。这个确认不是立即发送,通常将推迟几分之一秒;(Delayed-ACK)
4)TCP将保持它首部和数据的校验和;
5)既然TCP报文段作为IP数据报来传输,而IP数据报的到达可能失序,因此TCP报文段的到达也可能失序。如果有必要,TCP将对收到的数据进行重新排序;
6)IP数据报可能会发生重复,TCP的接收端必须丢弃重复的数据;
7)TCP提供流量控制;TCP连接的每一方都有固定大小的缓冲控件,TCP的接收端只允许另一端发送接收端缓冲区所能接纳的数据,这将防止较快主机致使减慢主机的缓冲区溢出;
TCP的字节流:
两个应用程序通过TCP连接交换8bit字节构成的字节流,TCP不在字节流中插入记录标识符,这就是字节流服务。
2. TCP头部详解
1)源端口和目的端口:用于寻找发端和收端的应用程序。这两个值加上IP首部的源端IP和目的端IP唯一确定一个TCP连接;
2)序号(Seq):标识从TCP发端向TCP收端发送的数据字节流,它标识在这个报文段中的第一个数据字节的序号。如果将字节流看作在两个应用程序间的单向流动,
则TCP用序号对每个字节进行计数。序号是32bit的无符号数,序号到达2的32次方减一后又从0开始。SYN标志消耗一个序号;
3)确认序号(ACK):如果上次成功收到数据字节序号加一。只有ACK标志为1时确认序号才有效,ACK = Seq + 1;
4)数据偏移:标识该TCP头部有多少个32bit(4字节),4比特最大表示15,TCP头部最长为60字节;
5)窗口:TCP流量控制的手段,告诉对方,我的TCP接收端缓冲区还能容纳多少个字节,这样对方能控制发送数据的速度;
6)校验和:由发送端填充,接收端对TCP报文执行CRC算法,以检验TCP报文段是否损毁。不仅校验头部,还包括数据部分;
7)紧急指针:也称为紧急偏移。紧急指针是一个正的偏移量,和序号字段的值相加表示最后一个紧急指针的下一字节的序号。是相对于当前序号的偏移。紧急指针
是发送端向接收端发送紧急数据的方法;
8)六个标志位:
a)URG:表示紧急指针是否有效;
b)ACK:表示确认号是否有效,携带ACK标志的数据报文段为确认报文段;
c)PSH:提示接收端的应用程序应该立即从TCP接受缓冲区中读走数据,为接受后数据腾出空间;
d)RST:表示要求对方重新建立连接,携带RST标志位的TCP报文段称为复位报文段;
e)SYN: 表示请求建立一个连接,携带SYN标志的TCP报文段称为同步报文段;
f)FIN:通知对方本端要关闭了,带FIN标志的TCP报文段称为结束报文段;
9)TCP头部选项:头部选项是一个可变长的信息,这部分最多包含40个字节(前面20字节是固定的)
头部选项的实际运用:
a)最大报文传输段(Maxinum Segment Size——MSS,后续进行详解)
b)窗口扩大选项(window scaling)
c)选择确认选项(Selective Acknowledgements——SACK)
d)NOP
最后
以上就是细腻豌豆为你收集整理的TCP头部详解1. TCP的定义2. TCP头部详解的全部内容,希望文章能够帮你解决TCP头部详解1. TCP的定义2. TCP头部详解所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复