初学TCP笔记总结之TCP报头

TCP是传输层的协议,是TCP/IP协议的一个重要协议,一些重要的socket选项都与TCP协议有关。

TCP协议的特点:

  • 面向连接

使用TCP协议的双方必须先建立连接,然后才可以开始数据的读写。双方必须为该链接分配必须的内核资源,以管理连接和连接上的数据传输。TCP连接是全双工的,完成数据交换之后,通信双方必须断开连接以释放系统资源。并且TCP协议的这种连接是一对一的,所以基于广播和多播的应用程序应该使用UDP协议。

  • 字节流

在TCP协议中,当发送端连续多次执行写操作时,TCP模块会先将这些数据放入TCP发送缓冲区中,当TCP模块正真要发送数据时,发送缓冲区的这些数据会被封装成一个或多个TCP报文发出,所以TCP报文的个数与发送端的写操作没有数量上的关系。当接收端接收到一个至多个TCP报文之后,TCP模块会把他们携带的应用程序的数据按照报文段的序号依次放进TCP接收缓冲区,并通知应用程序读取缓冲区,接收端应用程序可以一次把缓冲区全部读完,也可以分次读取。因此发送端执行写操作的次数与接收端的读操作之间没有任何数量上的联系,这就是字节流的概念。

  • 可靠传输

TCP协议采用发送应答机制,就是发送端每次发出TCP报文段必须要收到接收端的回应,才认为这个TCP报文段发送成功了。其次TCP协议采用超时重传机制,发送端在发生出一个TCP报文段后,开启定时器,如果在定时间内没有收到接收端的回应就重新发送该报文段。虽然TCP协议最终是以无状态,没有顺序的IP数据报发送的,但是TCP协议会对接收到的TCP报文段进行重新排序,整理再交付给应用层。

TCP头部结构

 16位端口号:用来告知主机报文段来自哪里,一级上传给哪个上层协议或应用程序

32位序号:一次TCP通信过程中某一传输方向上的字节流的每个字节的编号。假设A给B进行TCP通信,A给B发发送的第一个TCP报文段中,序列号被初始化为一个随机值ISN,之后的TCP报文段中的序列号=ISN+报文段所携带的数据第一个字节在整个字节流中的偏移。比如某个tcp报文段的数据是是字节流中的第1025~2048字节,那么他的序列号就是  ISN+1025。

32位确认号:用作对另一方发送来的TCP报文段的响应。其值是收到的报文段的序列号值加一。

4位头部长度:和IP协议的4位头部长度一样,标识TCP的头部有多少个4字节。因为4位最大能表示15,所以TCP头部最长60换个字节。

6位标志位:

  • URG标志,表示紧急指针是否有效。
  • ACK标志,表示确认号是否有效。
  • PSH标识,提示接收端应用程序应该立即从TCP接收端缓冲区中读走数据,为接收后续数据腾地方。
  • RST标识,表示要求对方重新建立连接。携带RST标识的报文段被称为复位报文段。
  • BST标识,表示请求建立一个连接。携带BST标识的报文段被称为同步报文段。
  • FIN标识,表示通知对方要关闭就连接了。携带FIN标识的报文段被称为结束报文段。

16位窗口大小:TCP流量控制的一个手段,可以告诉对方本端的接收缓冲区还能接收多少字节的数据,这样对方就可以控制数据发送的速度。

16位校验和:由发送端填充,接收端检验报文段是否损坏。

16位紧急指针:是一个正的偏移量。他和序号字段的值相加表示最后一个紧急序数据的下一字节的序号。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值