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会处理 滑动窗口来进行流量控制 对字节流的内容不做任何解释 ...
随机推荐
- Hadoop单节点启动分布式伪集群
emm~ 写这篇博客只是手痒,因为开发环境用单节点就够了,生产环境肯定是真实集群,所以这个伪分布式纯属娱乐而已. 配置HDFS1. 安装好一台hadoop,可以参考这篇博客.2. 在hadoop目录下 ...
- Ubuntu分区挂载
创建主分区: 25G 主分区 空间起始位置 Ext4日志文件系统 / (ps:安装主要放这了,原因不明) 创建swap分区: 8192MB 逻辑分区 空间起 ...
- 关于记录log日志的几种方法
最近在记录日志的时候总结了几种方式: 1.使用log4j2记录 2.使用log4j记录 3.使用logback配置,记录前使用 private final Logger logger = Logge ...
- scrapyd使用教程
1. 安装服务器: pip install scrapyd 启动: scrapyd 访问:127.0.0.1:6800 2. 安装客户端 pip install scrapyd-client 3. 进 ...
- 第五篇 CSS入门 明白 三种嵌套形式,三种常用控制器
CSS入门 css是 层叠式样式表 css的作用是什么呢?举个抽象的例子啊,HTML是人,CSS则是衣服... css给html穿上衣服,有三种形式: 内嵌.内联.外联. 这三种形式,优先级为 ...
- python调用接口的方式
python中调用API的几种方式: - urllib2 - httplib2 - pycurl - requests urllib2 import urllib2, urllib github_ur ...
- iOS响应链和传递机制
iOS中加载的时候会先执行main函数 int main(int argc, charchar * argv[]) { @autoreleasepool { return UIApplicationM ...
- Delphi 有类型文件
- RaspberryPi交叉编译环境配置-Ubuntu & wiringPi & Qt
1.配置RaspberryPi交叉编译环境: 在开发RaspberryPi Zero的过程中,由于Zero板卡的CPU的处理性能比较弱,因此其编译的性能比较弱,需要将代码在PC电脑上交叉编译完成之后再 ...
- Python中的序列
Python中有四种内建的数据结构,即列表.元组.字典.集合.其中字典和集合我会以后再写,现在先说列表和元组,它们两个和以前提到很多次的字符串, 其实都属于——序列. 一.列表(list): 1. l ...