我是靠谱客的博主 细腻豌豆,最近开发中收集的这篇文章主要介绍TCP头部详解1. TCP的定义2. TCP头部详解,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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头部详解所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(54)

评论列表共有 0 条评论

立即
投稿
返回
顶部