TCP 之 TCP首部
TCP首部图

TCP首部说明
源端口,目的端口
用于寻找发送端和接收端应用进程。(源IP,源端口,目的IP,目的端口) 四元组确定唯一一个TCP连接;(IP,端口)也称为一个插口(socket);
序号
标识从TCP发送端向TCP接收端发送的数据字节流,它标识在当前传输报文段中的第一个数据字节;需要是32比特的无符号数,序号达到2^32-1后又冲0开始;
当建立一个新连接时,SYN标志设置为1;序号字段包含由这个主机选择的初始序号ISN(Initial Sequence Number);该主机要发送数据的第一个字节序号为这个ISN+1,因为SYN标志消耗了一个序号;
TCP为应用层提供全双工的服务,这意味着数据在两个方向上独立的进行传输。因此,连接的每一端都必须保持每个方向上的传输数据序号。
确认序号
确认序号包含发送确认的一端期望收到的下一个需要。因此,确认序号应当是上次已成功收到的数据字节序号+1;只有ACK标志为1时确认序号字段才有效;
发送ACK无需任何代价,因为32位的确认序号字段和ACK标志一样,总是TCP首部的一部分,因此,一旦一个TCP连接建立起来,这字段总是被设置的,ACK标志也总是被设置为1;
TCP可以表述为一个没有选择确认或者否认的滑动窗口协议。TCP缺少选择确认是因为TCP首部中的确认序号标识发送方成功接收的的字节,但还不包含确认序号所指的自己。当前还无法对数据流中选定的部分进行确认;如:1-1024已经收到,下一个接收到报文段中序号从2049-3072,此时收端不能确认这个报文段。它所能做的就是发回一个确认序号为1025的ACK;它也无法对一个报文段进行否认;如:如果收到1025-2048字节的报文段,但是校验和错误,TCP接收端所能做的就是发回一个确认序号为1025的ACK;
首部长度
首部长度包含4位,TCP首部选项字段的长度是可变的,首部最大长度为1111*4=60字节;没有选项的情况下,正常的长度是20字节;
标志位
URG–紧急指针有效;
ACK–确认序号有效;
PSH–接收方应该尽快将这个报文段交给应用层;
RST–重建连接;
SYN–同步序号用来发起一个连接
FIN–发送完成发送任务;
窗口大小
TCP的流量控制由连接的每一端通过声明窗口的大小来提供;窗口大小为字节数,起始于确认序号字段指明的值,这个值是接收端正期望接收的字节数;窗口大小是一个16位字段,因而窗口大小最大为65535字节;
校验和
校验和覆盖了整个TCP报文段:TCP首部和TCP数据。这是一个强制字段,一定是由发送端计算和存储,由接收端进行验证;
紧急指针
紧急指针是一个正的偏移量,和序号字段中的值相加标识紧急数据最后一个字节的序号;紧急指针只有在URG标志位设置为1时才有效;TCP紧急指针是发送端向另一端发送紧急数据的一种方式;
选项
最常见的选项字段是最长报文段大小,又称为MSS(Maximum Segment Size);每个连接通常都在通信的第一个报文段中指明这个选项;它指明本端所能接受的最大长度的报文段;
注:本文大部分内容来自于<TCP/IP详解>;
TCP 之 TCP首部的更多相关文章
- TCP报文段首部详解
TCP虽然是面向字节流的,但是tcp传送的数据单元却是报文段,一个报文段分为首部和数据两部分,几乎TCP所有功能都从首部来体现,下面我们来详细的剖析下它的首部. (1):源端口与目标端口:分别写入源端 ...
- TCP/IP笔记——TCP特点、首部格式、滑动窗口
这次总结一下TCP相关的知识. TCP主要特点 面向连接:在通信前必须建立连接(只是逻辑上存在,而不是物理连接) 只能有两个端点:即只能一对一通信(所以通常p2p是用UDP实现的) 提供可靠交付服务: ...
- 动手学习TCP:TCP连接建立与终止
TCP是一个面向连接的协议,任何一方在发送数据之前,都必须先在双方之间建立一条连接.所以,本文就主要看看TCP连接的建立和终止. 在开始介绍TCP连接之前,先来看看TCP数据包的首部,首部里面有很多重 ...
- 结合Wireshark捕获分组深入理解TCP/IP协议栈之TCP协议(TCP报文格式+三次握手实例)
摘要: 本文简单介绍了TCP面向连接理论知识,详细讲述了TCP报文各个字段含义,并从Wireshark俘获分组中选取TCP连接建立相关报文段进行分析. 一.概述 TCP是面向连接的可靠 ...
- 协议-TCP:TCP
ylbtech-协议-TCP:TCP 传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的.可靠的.基于字节流的传输层通信协议,由IETF的RFC 793 ...
- the age of the TCP connection TCP Slow Start
w防止网络过载和拥塞 HTTP The Definitive Guide The performance of TCP data transfer also depends on the age of ...
- 使用app-inspector查看元素,无法连接到手机,提示错误{ Error: Command failed ……forward tcp:9001 tcp:9001错误解决
在学习使用app-inspector查看元素时,碰到一个问题.在cmd窗口执行命令app-inspector --port 5678 -u 85EABNFSU53R --verbose ,连接不到手 ...
- tcp slowstart (TCP 慢启动)
tcp slowstart (TCP 慢启动) 慢启动定义 慢启动,是传输控制协议使用的一种拥塞控制机制.慢启动也叫做指数增长期.慢启动是指每次TCP接收窗口收到确认时都会增长.增加的大小就是已确认段 ...
- ESP8266开发之旅 网络篇⑦ TCP Server & TCP Client
授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...
- TCP服务和首部知识点小结
服务 应用程序会被TCP分割成数据段,而UDP不分割. TCP有超时重传和确认 如果检验和出错将丢弃 IP数据包可能会失序或者重复,所以TCP会处理 滑动窗口来进行流量控制 对字节流的内容不做任何解释 ...
随机推荐
- 搭建springCloud网关zuul
一.pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www ...
- 公司SQL考核及小结(Oracle)
一.数据库初始化脚本: Create TABLE HAND_CUSTOMERS ( CUSTOMERS_NO ), CUSTOMERS_NAME ), CUSTOMERS_GENDER ), CUST ...
- mongo分布式锁Java实现
一.分布式锁使用场景: 代码部署在多台服务器上,即分布式部署. 多个进程同步访问一个共享资源. 二.需要的技术: 数据库:mongo java:mongo操作插件类 MongoTemplate(mav ...
- echarts-迁徙图地点图标颜色修改
引用:https://gallery.echartsjs.com/editor.html?c=xLSy9AUmlA var uploadedDataURL = "/asset/get/s/d ...
- vue路由公用
大体思路,一个页面,多个按钮,点击按钮后都跳转到一个路由:通过父亲传的值是什么,来决定跳那个路由:ajax数据也是通过判断来决定拉那个数据 路由: export default { routes: [ ...
- 打印canvas
这里我是新开窗口打印,会存在一个问题:就是不关闭打印窗口回到父页面,父页面不响应的情况 所以,我另外写了一个监听离开新开窗口,弹窗提示的函数,提示用户关闭打印窗口,方可进行后续操作 额,发现问题更大了 ...
- Linux下svn服务器的安装与配置-备份-恢复-计划任务
简介:SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS.CVS,它采用了分支管理系统,它的设计目标就是取代CVS.互联网上很多版本控制服务已从CVS迁移到Subvers ...
- jar包混淆和防反编译工具proguard使用简介
平时都是用java语言做开发,特殊情况下,需要对编译出的jar包混淆,防止被轻易的反编译出来看到源码,用的proguard工具,下面简单记录一下工具使用过程. 1.下载程序包,可以去https://w ...
- 码流回调过快导致下方处理不及时socket阻塞问题
在一个情形中遇到下面一个情况 简述下该图片,对sdk进行二次开发,通过第三方sdk接口获取码流信息.具体实现方式是通过回调函数CallBack_SDK来不停的回调第三方服务的视频流.起初实现逻辑如下: ...
- c++的并发操作(多线程)
C++11标准在标准库中为多线程提供了组件,这意味着使用C++编写与平台无关的多线程程序成为可能,而C++程序的可移植性也得到了有力的保证.另外,并发编程可提高应用的性能,这对对性能锱铢必较的C++程 ...