IP协议

IP协议是TCP/IP协议族的动力,它为上层协议提供无状态、无连接、不可靠的服务。
优点:简单,高效。

IPv4首部一般是20字节长。在以太网帧中,IPv4包首部紧跟着以太网帧首部,同时以太网帧首部中的协议类型值设置为0800
无状态:IP通信双方不同步传输数据的状态信息,所有的IP数据报的传输都是独立的。所以容易发生重复和乱序的情况并且IP层不予处理。 然后将这些乱序的交给上层传输层(TCP/UDP等)来处理,将其处理成有序的,正确的。再交给应用层。
不可靠:IP协议不能保证IP数据报准确到达。所以它提供ICMP报文来辅助,一旦检测到IP数据报发送失败,通知上层协议。

版本号(Version): IP协议的版本号。有IPv4和IPv6,现在主流是IPv4。
IP包头长度(Header Length):IP包头的长度IP包头最小长度为20字节,最大60字节。
服务类型(Type of Service)包含一个4位优先权字段:最小延时,最大吞吐量,最高可靠性和最小费用。
IP包总长(Total Length):以字节为单位计算的IP包的长度 (包括头部和数据),所以IP包最大长度65535字节,但由于MTU限制,一般无法到达这个值。
标识符(Identifier):唯一的标识数据报。该字段和Flag和Fragment Offest字段联合使用,对大的上层数据包进行分段(fragment)操作。
标记(Flag):当一个包过大被分片时,用来标识属于同一个包的片段。该字段第一位不使用。第二位是DF位,DF位设为1时表明路由器不能对该上层数据包分段。如果一个上层数据包无法在不分段的情况下进行转发,则路由器会丢弃该上层数据包并返回一个错误信息。第三位是MF位,当路由器对一个上层数据包分段,则路由器会在最后一个分段的IP包的包头中将MF位设为0,其余IP包的包头中将MF设为1。
Bit 0: reserved, must be zero
Bit 1: (DF) 0 = May Fragment, 1 = Don't Fragment.
Bit 2: (MF) 0 = Last Fragment, 1 = More Fragments.
分段序号(Fragment Offset):分片相对原始IP数据报开始处的偏移。由于IP包在网络上传送的时候不一定能按顺序到达,这个字段保证了目标路由器在接受到IP包之后能够还原分段的上层数据包。到某个包含分段的上层数据包的IP包在传送是丢失,则整个一系列包含分段的上层数据包的IP包都会被要求重传。
生存时间(Time to Live):当IP包进行传送时,先会对该字段赋予某个特定的值。当IP包经过每一个沿途的路由器的时候,每个沿途的路由器会将IP包的TTL值减少1。如果TTL减少为0,则该IP包会被丢弃。这个字段可以防止由于故障而导致IP包在网络中不停被转发。
协议(Protocol):长度8比特。标识了上层所使用的协议。用来区分上层协议(ICMP为1,TCP为6,UDP为17)。
头部校验(Header Checksum):由于IP包头是变长的,仅以CRC算法检验数据报头部在传输过程中是否损坏。
源IP地址(Source IP Addresses):标识了这个IP包的源IP地址。
目的IP地址(Destination IP Address):标识了这个IP包的目的IP地址。
可选项(Options):记录路由,告诉途径得所有路由把IP填进来。可用的IP选项包括
记录路由(record route),告诉数据报途经的所有路由器都将自己的IP地址填入IP头部的选项部分,这样我们就可以跟踪数据报的传递路径。
时间戳(timestamp),告诉每个路由器都将数据报被转发的时间(或时间与IP地址对)填入IP头部的选项部分,这样就可以测量途经路由之间数据报传输的时间。
松散源路由选择(loose source routing),指定一个路由器IP地址列表,数据报发送过程中必须经过其中所有的路由器。
严格源路由选择(strict source routing),和松散源路由选择类似,不过数据报只能经过被指定的路由器。
填充(Padding):因为IP包头长度(Header Length)部分的单位为32bit,所以IP包头的长度必须为32bit的整数倍。因此,在可选项后面,IP协议会填充若干个0,以达到32bit的整数倍

TCP协议

TCP(TransmissionControl Protocol)传输控制协议是一种面向连接的、可靠的、基于字节流的传输层通信协议。在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能,用户数据报协议(UDP)是同一层内另一个重要的传输协议。
TCP连接包括三个状态:连接创建、数据传送和连接终止。

源目端口号:计算机上的进程要和其他进程通信是要通过计算机端口的,而一个计算机端口某个时刻只能被一个进程占用,所以通过指定源端口和目标端口,就可以知道是哪两个进程需要通信。TCP报头中的源端口号和目的端口号同IP数据报中的源IP与目的IP唯一确定一条TCP连接。
序列号:表示本报文段所发送数据的第一个字节的编号。在TCP连接中所传送的字节流的每一个字节都会按顺序编号。
确认号:表示接收方期望收到发送方下一个报文段的第一个字节数据的编号。也就是告诉发送发:我希望你(指发送方)下次发送的数据的第一个字节数据的编号是这个确认号。也就是告诉发送方:我希望你(指发送方)下次发送给我的TCP报文段的序列号字段的值是这个确认号。
TCP首部长度:由于TCP首部包含一个长度可变的选项部分,所以需要这么一个值来指定这个TCP报文段到底有多长。或者可以这么理解:就是表示TCP报文段中数据部分在整个TCP报文段中的位置。该字段的单位是32位字,即:4个字节。
URG:表示本报文段中发送的数据是否包含紧急数据。URG=1,表示有紧急数据。后面的紧急指针字段只有当URG=1时才有效。
ACK:表示是否前面的确认号字段是否有效。ACK=1,表示有效。只有当ACK=1时,前面的确认号字段才有效。TCP规定,连接建立后,ACK必须为1。
PSH:告诉对方收到该报文段后是否应该立即把数据推送给上层。如果为1,则表示对方应当立即把数据提交给上层,而不是缓存起来。
RST:只有当RST=1时才有用。如果你收到一个RST=1的报文,说明你与主机的连接出现了严重错误(如主机崩溃),必须释放连接,然后再重新建立连接。或者说明你上次发送给主机的数据有问题,主机拒绝响应。
SYN:在建立连接时使用,用来同步序号。当SYN=1,ACK=0时,表示这是一个请求建立连接的报文段;当SYN=1,ACK=1时,表示对方同意建立连接。SYN=1,说明这是一个请求建立连接或同意建立连接的报文。只有在前两次握手中SYN才置为1。
FIN:标记数据是否发送完毕。如果FIN=1,就相当于告诉对方:“我的数据已经发送完毕,你可以释放连接了”
窗口大小:表示现在运行对方发送的数据量。也就是告诉对方,从本报文段的确认号开始允许对方发送的数据量。
校验和:提供额外的可靠性。具体如何校验,参考其他资料。
紧急指针:标记紧急数据在数据字段中的位置。
选项部分:其最大长度可根据TCP首部长度进行推算。TCP首部长度用4位表示,那么选项部分最长为:(2^4-1)*4-20=40字节。
选项部分的应用
1. MSS最大报文段长度(Maxium Segment Size):指明数据字段的最大长度,数据字段的长度加上TCP首部的长度才等于整个TCP报文段的长度。MSS值指示自己期望对方发送TCP报文段时那个数据字段的长度。通信双方可以有不同的MSS值。如果未填写,默认采用536字节。MSS只出现在SYN报文中。即:MSS出现在SYN=1的报文段中。
2. 窗口扩大选项(Windows Scaling):由于TCP首部的窗口大小字段长度是16位,所以其表示的最大数是65535。但是随着时延和带宽比较大的通信产生(如卫星通信),需要更大的窗口来满足性能和吞吐率,所以产生了这个窗口扩大选项。
3. SACK选择确认项(Selective Acknowledgements):用来确保只重传缺少的报文段,而不是重传所有报文段。比如主机A发送报文段1、2、3,而主机B仅收到报文段1、3。那么此时就需要使用SACK选项来告诉发送方只发送丢失的数据。那么又如何指明丢失了哪些报文段呢?使用SACK需要两个功能字节。一个表示要使用SACK选项,另一个指明这个选项占用多少字节。描述丢失的报文段2,是通过描述它的左右边界报文段1、3来完成的。而这个1、3实际上是表示序列号,所以描述一个丢失的报文段需要64位即8个字节的空间。那么可以推算整个选项字段最多描述(40-2)/8=4个丢失的报文段。
4. 时间戳选项(Timestamps):可以用来计算RTT(往返时间),发送方发送TCP报文时,把当前的时间值放入时间戳字段,接收方收到后发送确认报文时,把这个时间戳字段的值复制到确认报文中,当发送方收到确认报文后即可计算出RTT。也可以用来防止回绕序号PAWS,也可以说可以用来区分相同序列号的不同报文。因为序列号用32为表示,每2^32个序列号就会产生回绕,那么使用时间戳字段就很容易区分相同序列号的不同报文。
5. NOP(NO-Operation):它要求选项部分中的每种选项长度必须是4字节的倍数,不足的则用NOP填充。同时也可以用来分割不同的选项字段。如窗口扩大选项和SACK之间用NOP隔开。

转载于:https://blog.51cto.com/437549/2118470

TCP/IP报文头部结构相关推荐

  1. IP协议详解【IP报文头部结构、IP分片、IP路由、IP转发】

    目录 IP协议:全称:Internet Protocol(网际互连协议) IP协议的特点: IP头部结构: IP分片: IP路由: IP转发: IP协议:全称:Internet Protocol(网际 ...

  2. TCP/IP协议头部结构

    一 TCP/IP协议族体系结构 数据链路层:数据链路层主要使用ARP(地址解析协议) RARP(逆地址解析协议)网络层使用IP进行寻址.而数据链路层使用物理地址.网络层必须将目标及其的IP转换为物理地 ...

  3. TCP/IP协议头部结构与解析

    参考  http://blog.sina.com.cn/s/blog_634d74310102vmfn.html IP协议 IP协议(Internet Protocol)是网络层协议,用在因特网上,T ...

  4. html头部协议,TCP/IP协议头部结构体

    //Mac头部,总长度14字节 typedef struct _eth_hdr { unsigned char dstmac[6]; //目标mac地址 unsigned char srcmac[6] ...

  5. TCP/IP报文格式

    TCP/IP报文格式 修改浏览权限 | 删除 1.IP报文格式 IP协议是TCP/IP协议族中最为核心的协议.它提供不可靠.无连接的服务,也即依赖其他层的协议进行差错控制.在局域网环境,IP协议往往被 ...

  6. tcp 发送数据长度比预设缓存大_一文秒懂 TCP/IP实际五层结构(下篇)

    点击上方蓝字关注我们! 引言 本运维老狗在TCP/IP实际五层结构的上篇和中篇中详细讲解了TCP/IP实际结构,以及以太网协议.IP协议.和UDP协议.有同学留言催更,迫切的想看本老狗对TCP协议的讲 ...

  7. TCP/IP数据包结构具体解释

    [关键词] TCP IP 数据包 结构 具体解释 网络 协议 一般来说,网络编程我们仅仅须要调用一些封装好的函数或者组件就能完毕大部分的工作,可是一些特殊的情况下,就须要深入的理解 网络数据包的结构, ...

  8. TCP/IP 报文协议学习

    最近在学习流量录制框架goreplay(GitHub - buger/goreplay: GoReplay is an open-source tool for capturing and repla ...

  9. TCP报文头部结构详解和作用解析

    TCP报文的头部结构 这个头部结构非常的重要,建议大家记住.可以画出来并且可以说出来每个部分的作用是什么,主要是要会解释TCP怎么保证通讯的可靠机制的. 其中,32位序号是指通讯过程中,某个传输方向上 ...

最新文章

  1. 基于Picture Library创建的图片文档库中的上传多个文件功能(upload multiple files)报错怎么解决?...
  2. 整图下沉,MindSpore图引擎详解
  3. linux使用shell函数扩充命令,Linux Shell系列教程之(十五) Shell函数简介 | Linux大学...
  4. Linux内核分析作业第八周
  5. 阶乘数码(洛谷P1591题题解,Java语言描述)
  6. linux+PATH
  7. python写一个表白程序_用Python个女神做一个表白神器
  8. 小米6twrp最新第三方rec_小米5(gemini:双子座)刷机
  9. 如何搭建一个自己的网站-项目篇
  10. Moodle安装教程以及phpMyAdmin无法访问解决
  11. java毕业设计_高校后勤管理系统
  12. 说下我自己对空号检测的理解跟心得
  13. 七人表决器VHDL语言
  14. 专利申请之:交底和挖掘的方法
  15. SuperMap三维复杂模型建模之3D极坐标建模——基础篇
  16. HighCharts柱状图显示百分比
  17. 大一计算机专业学期计划范文,大一新学期学习计划范文(通用5篇)
  18. Java处理CSV或者制表符等分隔文件,比如Maf文件
  19. 【解决】移动硬盘被MAC电脑识别为只读盘
  20. 什么是重绘,重排?如何解决?

热门文章

  1. NBR100多IP出口解决方案的配置方法
  2. 立flag(java)
  3. java设计模式之 装饰器模式
  4. 【Arduino基础教程】PM2.5粉尘检测传感器
  5. python pyquery倒数第二个节点之前的节点_Python中PyQuery库的使用总结
  6. mac 电脑 eclipse 启动停在 org.eclipse.debug.core 导致无法启动
  7. Java 11 将至,不妨了解一下 Oracle JDK 之外的版本
  8. Spring-Cloud-Config消息总线和高可用
  9. 学霸机器人“拼”高考 将成国内人工智能里程碑
  10. 杨老师课堂之ArrayList集合常用方法解析