本博客借鉴谢希仁第六版《计算机网络》的第九章

TCP报头 

(1)源端口和目的端口

各占2个字节,分别写入源端口号和目的端口号,TCP的分用功能是通过端口实现的。

(2)序号

占4个字节。序号范围是[0,2^32-1],共2^32(即4282967296)个序号,序号增加到2^32-1后,下一个序号就回到0,也就是说序号使用mod 2^32运算。TCP是面向字节流的。在一个TCP连接中传输的字节流中的每一个字节都是按顺序编号。整个要传送的字节流的起始序号必须在连接建立时设置。首部中的序号字段值则指的是本报文段所发送的数据的第一个字节的序号。例如,一报文段的序号字段值是301,而携带的数据共有100字节。这就说明:本报文段的数据的第一个字节的序号是301,最后一个字节的序号是400.显然,下一个报文段(如果还有的话)的数据序号应当从401开始,即下一个报文段的序号字段值应为401.这个字段的名称也叫做“报文段序号”。

(3)确认号

占4个字节,是期望收到对方下一个报文段的第一个数据字节的序号。例如,B正确收到了A发送过来的一个报文段,其序号字段值是501,而数据长度是200字节(序号501-700),这表明B正确收到了A发送的到序号700为止的数据。因此,B期望收到A的下一个数据序号是701,于是B在发送给A的确认报文段中确认号置为701。请注意,现在的确认号不是500,也不是700,而是701.

总之,应当记住:若确认号=N,则表明:到序号N-1为止的所有数据都已正确收到。

由于序号字段有32位长,可对4GB(即4千兆字节)的数据进行编号。在一般情况下,可保证当序号重复使用时。旧序号的数据早已通过网络到达终点了。

(5)数据偏移

占4位,它指出TCP报文段的数据起始处距离TCP报文段的起始位置有多远。这个字段实际上是指出TCP报文段的首部长度。由于首部中还有长度不确定的选项字段,因此数据偏移字段是必要的。但请注意,“数据偏移”的单位长度是32位字(即以4字节长的字位计算单位)。由于4位二进制数能够表达的最大十进制数为15,因此数据偏移的最大值是60字节,这也是TCP首部的最大长度(即选项长度不能超过40字节)

(6)保留

占6位,保留为今后使用,但目前应置为0。下面有6个控制位说明报文段的性质,它们的意义见下面的(7)-(12)。

(7)紧急URG(URGent)

当URG=1时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据),而不是按原来的排队顺序来传送。例如,已经发送了很长的一个程序要在远地的主机上运行。但是后来发现了一些问题,需要取消该程序的运行。因此用户从键盘发出中断命令(Control+c)。如果不使用紧急数据,那么这两个字符才被交付到接受方的应用进程。这样做就浪费了许多时间。

当URG置为1时,发送应用进程就告诉发送方的TCP有紧急数据要传送。于是发送方TCP就把紧急数据插入到本报文段数据的最前面,而在紧急数据后面的数据仍是普通数据,这是要与首部中紧急指针字段配合使用。

(8)确认ACK(ACKnowledgment)   仅当ACK=1是确认号字段才有效。当ACK=0时,确认号无效。TCP规定,在连接建立后所有传送的报文段都必须把ACK置为1

(9)推送PSH(PuSH)  当两个应用进程进行相互交互的通信时,有时在一端的应用进程希望在键入一个命令后立即就能够收到对方的响应。在这种情况下,TCP就可以使用推送(push)操作。这时,发送方TCP把PSH置为1,并立即创建一个报文段发送出去。接收端TCP收到PSH=1的报文段,就尽快地(即“推送”向前)交付给接收应用程序,而不再等到整个缓存都填满了后在向上交付。

虽然应用程序可以选择推送操作,但推送操作还很少使用。

(10)复位RST(ReSeT)   当RST=1时,表明TCP连接中出现较为严重的差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接。RST置为1还用来拒绝一个非法的报文段或拒绝打开一个连接。RST也可以称为重建位或重置位。

(11)同步SYN(SYNchronization)    在连接建立时用来同步序号。当SYN=1而ACK=0时,表明这是一个连接报文请求段。对方若是同意建立连接,则应在响应的报文段中使用SYN=1和ACK=1。因此,SYN置为1就表示这是一个连接请求或连接接收报文。

(12)终止FIN(FINis,意思是“完”、“终”)   用来释放一个连接。当FIN=1时,表明此报文段的发送方的数据已发送完毕,并要求释放运输连接。

(13)窗口

占2个字节。窗口值是[0,2^16-1]之间的整数。窗口指的是发送本报文段的一方的接收窗口(而不是自己的发送窗口)。窗口值告诉对方:从本报文段首部中的确定号算起,接收方目前允许对方发送的数据量。之所以要有这个限制,是因为接收方的数据缓存空间是有限的。总之,窗口值作为接收方让发送方设置为其发送窗口的依据。

例如,设确认号是701,窗口字段是1000。这就表明,从701号算起,发送次报文段的一方还有接收1000个字节数据(字节序号是701-1700)的接收缓存空间。

总之,应当记住,窗口字段明确指出了现在允许对方发送的数据量。窗口值是经常在动态变化着。

(14)校验和

占2个字节。校验和字段检验的范围包括首部和数据这两个部分。和UDP用户数据报一样,在计算校验和时,要在TCP报文段的前面加上12字节的伪首部。伪首部的格式与UDP用户数据报的伪首部一样。但应把伪首部第4个字段中的17改为6(TCP的协议号是6),把第5字段中的UDP长度改为TCP长度。接收方收到此报文段后,仍要加上这个伪首部来计算校验和。若使用IPv6,则相应的伪首部也要改变。

(15)紧急指针

占2个字节。紧急指针仅在URG=1时才有意义,它指出本报文段中的紧急数据的字节数(紧急数据结束后就是普通数据)。因此紧急指针指出来紧急指针的末尾在报文段中的位置。当所有紧急数据都处理完时,TCP就告诉应用程序恢复到正常操作。值得注意的是,即使窗口为零时也可发送紧急数据。

(16)选项

长度可变,最长可达40字节。当没有选项时,TCP的首部长度是20字节。

UDP报头

用户数据报UDP有两个字段:数据字段和首部字段。首部字段很简单,只有8个字节,有四个字段组成,每个字段的长度都是两个字节。各字段意义如下:

(1)源端口      源端口号。在需要对方回信时选用。不需要时可全用0。

(2)目的端口       目的端口号。这在终点交付报文时必须要使用到。

(3)长度      UDP用户数据报的长度,其最小值是8(仅有首部)。

(4)校验和     校验UDP用户数据报在传输中是否有错,有错就丢弃。

TCP,UDP的报头详解相关推荐

  1. uip tcp udp运行流程详解

    uip_process运行流程 uip_process(u8_t flag) (1)if(flag == UIP_UDP_SEND_CONN),若是则goto udp_send;不是则向下执行: (2 ...

  2. [windows网络编程]tcp/udp编程初步详解-转

    #pragma comment (lib,"ws2_32.lib") #include <Winsock2.h> #include <stdio.h> 如你 ...

  3. 【网络原理篇2】TCP报头详解

    在这一篇文章当中,了解到TCP是属于传输层的协议:当数据从应用层向传输层发送的时候,如果使用的是TCP协议,那么就需要把应用层的数据加上TCP报头.初识网络:IP.端口.网络协议.TCP-IP五层模型 ...

  4. TCP/IP五层模型详解

    TCP/IP五层模型详解 应用层 HTTP:简单的明文传输的请求--响应协议 HTTP数据结构: 首行 头部 空行 正文 浏览器的控制 HTTPS 定义 CA认证 SSL加密流程: 混合对称加密过程: ...

  5. tcp网络通信教程 java_基于java TCP网络通信的实例详解

    JAVA中设计网络编程模式的主要有TCP和UDP两种,TCP是属于即时通信,UDP是通过数据包来进行通信,UDP当中就会牵扯到数据的解析和传送.在安全性能方面,TCP要略胜一筹,通信过程中不容易出现数 ...

  6. 前端基础-TCP/IP 不完全详解

    TCP/IP 不完全详解 TCP/IP是通信协议的统称.首先,我们先认识一下OSI参考模型 OSI 参考模型 OSI 参考模型中各个分层的作用如下: 概括的说: 应用层:为应用程序提供服务并规定应用程 ...

  7. http协议报头详解

     目录: 1. http协议简介 2. http报头举例 3. http报头详解 4. 几个字段的说明 5. 总结 6. 参考文章 1. http协议简介 HTTP是Hyper Text Tran ...

  8. TCP、UDP和HTTP详解

    http:是用于www浏览的一个协议. tcp:是机器之间建立连接用的到的一个协议. 1.TCP/IP是个协议组,可分为三个层次:网络层.传输层和应用层. 在网络层有IP协议.ICMP协议.ARP协议 ...

  9. 传输层协议TCP和UDP的区别详解

    一.TCP协议 1.TCP的优点: 可靠,稳定 TCP的可靠体现在TCP在传递数据之前,会有三次握手来建立连接,而且在数据传递时,有确认.窗口.重传.拥塞控制机制,在数据传完后,还会断开连接用来节约系 ...

最新文章

  1. 如是院长说:买不起房就多买两套,大家怎么看
  2. Future 接口介绍
  3. Python 集合 day3
  4. 汇编语言 数据寄存器AX、BX、CX、DX
  5. 使用 matlab 数字图像处理(三)—— 实现图像的旋转(不使用 imrotate)
  6. 详解Linux内核红黑树算法的实现 http://blog.csdn.net/npy_lp/article/details/7420689
  7. ping结果中TTL是什么意思
  8. matlab求解一元四次函数,excel数据函数参数是四个吗|求一个简单的一元四次函数的最大值...
  9. 瑞士军刀──Valgrind
  10. AXI4协议与AXI3协议区别
  11. linux 搭建Discuz论坛教程-个人实践笔记
  12. 51单片机(1)单片机概述
  13. 阅读 | 蚂蚁金服:科技金融独角兽的崛起
  14. 配置mysql开启定时任务_mysql设置定时任务
  15. C++ 对象模型 第二章 构造函数语意学
  16. 注册会计师考试计划和安排
  17. W3school:CSS基础:教程、简介、语法、选择器、使用(在HTML中引入)
  18. SAI在纳斯达克上市:作价1.88亿美元 成芯片供热第一股
  19. 眼部识别取代指纹识别还有多远?
  20. 怎么关闭vivo系统自检_真是涨知识了!原来别人的vivo手机不卡顿,是关掉了这4个设置...

热门文章

  1. 逻辑运算,逻辑与,逻辑或,逻辑非
  2. 有状态和无状态的区别
  3. 苏轼词《江城子》赏析
  4. [转帖]房博士教你购房(三)
  5. 有限合伙企业与有限责任公司区别
  6. cookie.getMaxAge()的-1是什么意思
  7. 创业,不能兼职(59)--- 多了个兄弟,却有很多遗憾 又来个哥们 ,好像比我还有胆魄...
  8. MySQL_DQL语句(分组,筛选)_数据库的备份/还原/约束
  9. 2009 年真题详解
  10. linux虚拟机挂载U盘