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会处理 滑动窗口来进行流量控制 对字节流的内容不做任何解释 ...
随机推荐
- 11 Scrapy框架之递归解析和post请求
一.递归爬取解析多页页面数据 - 需求:将糗事百科所有页码的作者和段子内容数据进行爬取切持久化存储 - 需求分析:每一个页面对应一个url,则scrapy工程需要对每一个页码对应的url依次发起请求, ...
- calc,support,media各自的含义及用法
@support:用于检测浏览器是否支持CSS某个属性,即条件判断,如果支持某个属性,可以写一套样式,如果不支持某属性,提供另一套样式作为替补. calc():用于计算动态函数值,支持“+”,“-”, ...
- java中的全局变量、局部变量与静态常量的区别
java中的变量类型分类: 类变量:独立于方法之外的变量,用 static 修饰.实例变量:独立于方法之外的变量,不过没有 static 修饰.局部变量:类的方法中的变量.比如: public cla ...
- 会计凭证替代 OBBH
单词:Validation: 会计凭证校验 ,Substitution:会计凭证替代 step1: GCX2 gblr: ZRFI_GGBR000 gbls: ZRFI_GGBS000 - step2 ...
- 多线程编程-- part5.1 互斥锁之公平锁-获取锁
基本概念 1.AQS:AbstractQueuedSynchronizer类 AQS是java中管理“锁”的抽象类,锁的许多公共方法都是在这个类中实现.AQS是独占锁(例如,ReentrantLock ...
- 关于overflow的学习
我在此记录一下我的学习到的东西,我自己不清楚所以要记录下来. overflow:hidden 但内元素的高度或宽度大于外元素的高度或宽度时,自动隐藏多余的部分,当然外元素设置了固定的高度或宽度. ov ...
- linux命令详解——sort
[原文链接]:http://www.cnblogs.com/51linux/archive/2012/05/23/2515299.html 1 sort的工作原理 sort将文件的每一行作为一个单位, ...
- 运维学习篇之jenkins的安装(CentOS7)
一. 介绍 Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能二. 作用 1.持续的软件版本 ...
- 00:Java简单了解
浅谈Java之概述 Java是SUN(Stanford University Network),斯坦福大学网络公司)1995年推出的一门高级编程语言.Java是一种面向Internet的编程语言.随着 ...
- SQLServer中跨服务器跨数据库之间的数据操作
首先必须理解一个概念: select * from sys.servers (查看系统表,看原来的服务器名) 要想跨域就必须在以上信息中可以检索到! 怎样添加? --创建链接服务器 ...