IPv4 Header与TCP Header简介

IPv4 Header

1.IPv4 Header

名称 作用说明
IP Version 4 bits , 总共有2^4 变化, 可以表示的数值 0~15 , 因此 IP Version最多可以标识 16种版本 ,ipv4 版本中 IP Version 的值为4,ipv6版本中 IP Version的值为6 , 已经被使用的版本:0,1,2,3,4,5,6,7,8 ,9 , 因此 下一个 IP 版本 应该是IPv10
IHL(Internet Header Length) 4bits ,总共有2^4 变化, 可以表示的数值 0~15, 该字段 用于声明 IPv4 包的 Header 长度,该字段值有个范围: 5~15, IHL = 5: 标示无 Options 字段 ,及 Header 长度为 20Bytes,IHL =15:表示 含 Options字段, 因为 Options字段最大长度是 40 Bytes ,因此 IPV4包的 Header 长度 最大也就60Bytes,所以只要带有Options字段,那么 IHL字段的值 一般都大于 5,如果是IMCPv4 或者 传输头,那么 数据包的 开头会 跳过前32位,从 Fragment ID 开始
**TOS (Type of Service) ** 8bits , 用于描述数据包的优先级,从而确定服务的优先级在RFC 2474,2475 中有相关的定义和说明:http://www.ietf.org/rfc/rfc2474.txt,http://www.ietf.org/rfc/rfc2475.txt,这个是用来 实现一个简单的QoS (Quality of Service) , 通过 协议 、 发送方、 接收方 来管理带宽,例如,您可能想要给你的网络电话连接优先级高于你的视频下载,或从你的老板网络通信更高的优先级比你的同事的网络通信,那么,就得使用 Qos 来定义 你这个连接的优先级了,如果没有QoS,带宽是先到先得,就是无论什么连接,都得排轮子,但是,8位不够真正做好QoS,和DiffServ,所以目前 TOS位 并没有被广泛使用在IPv4网络中 , 然而 QoS在IPv6得到了很大的提升,TOS位描述的是一个 数据包的优先级——实际上路由器在决定数据包 如何排队等待重传时,就是已经在使用 TOS位来判断优先级了,如果一个数据包无法提供请求的服务水平,那么 路由器 会把数据包的 TOS位标记为:undeliverable
Total Length 该字段总共16 bits,用于描述报文的总长度,肯定也 包含 报头长度,理论上 最小长度是20(20字节的头加上+0字节的Options+ 0字节的数据),和最大是65535个字节(因为只有16位可用来指定),实际上 所有网络设备所能处理的数据包的 长度 各不一样,一般而言 网络设备至少具有 处理数据包的 长度是 576 字节,但一个更典型的包的大小是1508字节 , 所以一个数据包极有可能遇到一个包处理长度低于被传输包长度的设备(该包的大小 大于该设备的最大包长度处理能力) 此时数据包就需要分片然后传输, 最后 到达目的地进行重组。分片和重组使得 IPv4 变得复杂,也容易混乱,IPv6中针对对此有很大改善
Identification 数据包被 切片后的 ID,及 Fragment ID,一共16bits,这样就有足够多的ID可用
空bit 1bit , 一个保留位,必须为0
DF 1bit , (Don’t Fragment) flag 标示数据包 不允许 切分, 如果 该包的长度 超出了 网络 设备的处理能力,并且又打上的 DF 标签,那么该网络设备会 丢弃掉该数据包
MF 1bit, (More Fragments) flag ,用于表示 数据包是否被分片了,如果被分片了该位为1,如果没被分片那么该位为0
Fragment Offset 13bits,分片的偏移量,用于决定分片重组时的顺序
Time-to-live(TTL) 8bits,用于防止网络中数据包被无限期的循环路由,最初想用秒数来设定TTL,但是没能实现,最后以跳数实现了,所以TTL的值描述的是包所能剩下的跳数(路由次数), 如果没跳一次(路由一次)次值就减一,如果跳数为0 ,这路由设备会丢弃此包,如果包被路由设备 Dropped,那么该路由设备会以返回给包发送者一条 ICMPv4的 不被路由的信息 (“time exceeded”),Traceroute 就是利用此原理来得到每一跳的路由设备的IP地址的
Protocol 8bits,用于定义IPv4 Header过后的下一个Header协议类型
  1      ICMPv4     Internet Control Message Protocol for IPv4 ([RFC 792](http://tools.ietf.org/html/rfc792))
  2      IGMP       Internet Group Management Protocol (RFCs [1112](http://tools.ietf.org/html/rfc1112), [2236](http://tools.ietf.org/html/rfc2236) and [3376)](http://tools.ietf.org/html/rfc3376)
  4      IPv4       IPv4 in IPv4 encapsulation, “IP in IP” tunneling ([RFC 2003)](http://tools.ietf.org/html/rfc2003)
  6      TCP        Transmission Control Protocol ([RFC 793](http://tools.ietf.org/html/rfc793))
  8      EGP        Exterior Gatgeway Protocol ([RFC 888](http://tools.ietf.org/html/rfc888))17      UDP        User Datagram Protocol ([RFC 768](http://tools.ietf.org/html/rfc768))41      IPv6       IPv6 tunneled over IPv4, “6in4” tunneling ([RFC 2473](http://tools.ietf.org/html/rfc2473))
 50      IPSec      ESP Header ([RFC 2406](http://tools.ietf.org/html/rfc2406))
 51      IPSec      AH Header ([RFC 2402](http://tools.ietf.org/html/rfc2402))89      OSPF       Open Shortest Path First routing ([RFC 1583](http://tools.ietf.org/html/rfc1583))132      SCTP       Streams Control Transmission Protocol ([RFC 4960](http://tools.ietf.org/html/rfc4960))
Header Checksum IPv4 Header 校验码,一共16bits,2个字节,当计算校验码时,本字段(Header CheckSum)会被置0,所以Header Checksum 字段是不参与 校验的,因此 Header的20字节里面参与校验的仅有18个字节,又因为 TTL 每一跳都要减一,所有Header的Checksum计算,每跳都要进行
**Source Address ** 4字节,用于描述源IP
Destination Address 4字节,用于描述目标IP
Options 很少使用,可选,最大 40字节 具体参考 RFC791

2. TCP Header

TCP Header
名称 作用说明
Source Port Number 源端口号, 16bits ,能表示的数值范围 0~65535, 对于linux 系统而言, 1024 以下的端口是特权端口,仅能root使用
Destination Port Number 目标端口号, 16bits ,也能表示 0~65535
Sequence Number 32bits, TCP报文的序列号
Acknowledgement Number 32bits, 确认 Sequence Number 的 确认号 , 一般 确认号的表示方式是 : 被确认的Sequence Numbe + 1, 必要要确认 对方100号报文,那么确认号就是 101
Header Length 4bits, TCP Header 的长度 最小20字节, 最大60字节 , 因为 Options 最大40bytes
Reserved 4bits, 保留位
CWR 1bit, Congestion Window Reduced
ECN 1bit, Explicit Congestion Notice
URG 1bit, Urgent的缩写, 紧急位,大部分报文会在 TCP/IP协议栈的 内核缓存区 等待处理, URG的意思就是 把这个请求 插入到 内核缓存区的前面,让报文尽快被处理
ACK 1bit, Acknowledgement的缩写, 确认位, 将该位 设置1 既可 开启此位, 开启此位表示 此报文为 确认报文,Acknowledgement Number 才会有效,因此 仅当 3次握手的第一次时 ACK 为0, 其他时候 都为1
PSH 1bit,推送位,不经过内核缓存区,直接接收处理
RST 1bit,重置位, 用于重置TCP 连接
SYN 1bit,请求位,synchronization的缩写, 用于发起 TCP连接请求, 将该位 设置1 既可 开启此位, 表示这是一条 TCP 请求报文,因此 ,3次握手当做 仅有第一次 SYN 位 才为1,其他时候 都为0
FIN 1bit,结束位,finish的缩写, 用于结束TCP连接请求,将该位 设置1 既可 开启此位, 4次挥手中, Initiator 请求断开时 FIN 为1 ,Receiver 处理完请求,也请求断开时 FIN 为1
Window Size 16bits, 滑动窗口,根据 接收缓冲进行调整,为了提高效率, 报文不会1个1个的发送,而是一批一批的发送, 确认也是 一批一批的进行确认(及延迟确认), 那么 一批发送多少个报文合适喃?这个值是根据对方的发送缓冲、线路容纳、 自己接收缓冲 这3个条件, 取最小的那个 作为 批量发送的报文数,当这一批报文 到达自己的 接收缓冲过后, 如果接收缓冲还有空间 缓冲报文, 就会以 Window Size 这个字段告诉 发送方,下次可以 一批发多少个报文过来因此,这个 Window Size 是 动态变化的
TCP Checksum TCP 报文校验码
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,137评论 6 511
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,824评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,465评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,131评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,140评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,895评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,535评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,435评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,952评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,081评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,210评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,896评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,552评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,089评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,198评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,531评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,209评论 2 357

推荐阅读更多精彩内容

  • 1. Nginx的模块与工作原理 Nginx由内核和模块组成,其中,内核的设计非常微小和简洁,完成的工作也非常简单...
    rosekissyou阅读 10,217评论 5 124
  • NodeJS TCP与UDP 一个最简单的TCP服务端 当一个客户端创建了一个新连接,传递给net.createS...
    77即是正义阅读 6,863评论 0 8
  • Linux(centos 7)文件数限制 内核参数fs.file-max /proc/sys/fs/file-ma...
    散装咖啡阅读 1,488评论 0 1
  • 更改ip和dnsVi /etc/sysconfig/network-scripts/ifcfg-eth0vi /...
    Xwei_阅读 1,824评论 0 3
  • 你匆匆的来 又匆匆的走 我的思想僵持在原地 不知如何向你挥手 朝霞的红粉 有你残余的光影 梦中的莲朵 是我思念的化结……
    夏梦云尔阅读 196评论 0 1