计算机⽹络各层数据包的结构(转)
⼀、TCP/IP的层次结构
Tcp/ip协议的四个层次
TCP、IP协议的分层结构图
CP/IP协议与OSI模型的对应关系(五层分法)
1、应⽤层:为⽤户的应⽤程序提供接⼝,使⽤户可以访问⽹络。(IE浏览器就处于应⽤层)
  HTTP、TFTP、FTP、NFS等属于应⽤层的协议。是⽤户客户端程序或软件之间使⽤的协议。
  HTTP 超⽂本传输协议(浏览⽹页服务)
  TFTP ⽂件传输协议(较快,但是不可靠)
  FTP ⽂件传输协议(提供⽂件上传,⽂件下载服务,较慢但是可靠)
  NFS ⽹络⽂件系统(Unix和Linux系统之间共享⽂件)
  SMTP 简单邮件传输协议(邮件的发送和转发)
  POP3 接收邮件(由服务器下载到本地)
  Talnet (远程登录功能(配置交换机、路由器))
  SNMP 简单⽹络管理协议(通过⽹管软件来管理⽹络)
  DNS 域名系统,将域名解析为IP地址(将百度的域名转换为服务器的IP地址)
2、传输层(运输层):提供端到端的通信(两台计算机上的软件间的连接),对信息流具有调节作⽤。
  TCP、UDP属于运输层的协议。在TCP/IP协议族中,⽹络层IP提供的是⼀种不可靠的服务,,它尽可能的把分组从源节点送到⽬的节点,但是并不提供任何可靠保证。⽽TCP在不可靠的IP层上提供了⼀个可靠的运输层(参见TCP三次握⼿),为了提供这种可靠的服务,TCP采⽤了超时重传,发送和接收的端到端的确认分组等机制。
  TCP 传输控制协议⾯向连接(打电话)可靠服务
  在通信之前要先建⽴连接需要同时在线
  UDP ⽤户数据报协议⾮⾯向连接(发快递)不可靠不稳定但速度更快
传输层-TCP数据包格式
  源端⼝(Source Port) ⽬的端⼝(Desination Port)
  序列号(Sequence Number)【数据包的序号】
  确认号(Acknowledgment Number)(序列号+1)【⽤于指⽰下⼀个数据包序号】
  报头的长度(HLEN):以32字节为单位的报头长度
  保留域(Reserved):设置为0
  编码位(Code Bits):⽤于控制段的传输(如会话的建⽴和终⽌)
  包括:URG、ACK、PSH、RST、SYN、FIN 6个位
  SYN(synchronous):请求建⽴TCP连接
  FIN:断开TCP连接
  RST:重置TCP连接
  ACK:确认、反馈连接情况
  PSH:将数据⽴刻送到应⽤层进⾏处理的命令
  URG:判断紧急指针是否有效的命令
  窗⼝⼤⼩(Windows):接收⽅能够继续接收的字节数【控制发送的速度】
  校验和(Checksum):baokuo TCP报头和数据在内的校验和【判断数据传输是否出错】
  紧急指针(Urgent Pointer):当前序列号到紧急位置的偏移量
  选项(Option):⼚商根据需要⾃定义的内容
  MAC地址
  数据(Data):上层协议数据
传输层-TCP端⼝号
  HTTP:80
  端⼝范围是:0-6535(1 --- 255 之间⼀般是知名的端⼝号;256 --- 1023的端⼝号,通常是由Unix系统占⽤(系统占⽤);1024 ---5000 是⼤多数TCP、IP实现的临时分配;⼤于5000的⼀般是给其他服务预留的(Internet上并不常⽤的服务))
端⼝的使⽤
TCP的三次握⼿
顺序号和确认号
TCP滑动窗⼝
UDP数据结构
3、⽹络层(Internet层):IP包的封装和路径的选择
  ICMP、IP、IGMP是⽹络层的协议。ICMP(控制报⽂协议)是IP协议的附属协议,IP层⽤它来与其他主机或路由器交换错误报⽂和其他重要信息;ICMP是Internet组管理协议,它⽤来把⼀个UDP数据多播到多个主机上。
  ⽹络层的协议
  IP数据包的封装,定义IP地址
  ICMP错误诊断(⽤ping测试⽹络连通性)
  ARP将IP地址解析为MAC地址
  RARP将MAC地址转换为IP地址
  IP地址分类:IPV4长32位共4个字节(⽤记法表⽰),由⽹络地址和主机地址组成。⽹络地址表⽰其属于互联⽹的哪⼀个⽹络,主机地址表⽰其属于该⽹络中的哪⼀台主机。⼆者是主从关系;⼜按字节分成4段,每个字段是⼀个字节,8位,最⼤值是255。
  IP地址根据⽹络号和主机号分为A、B、C三类及特殊地址D、E。全0和全1的都保留不⽤。
  A类:(1.0.0.0-126.0.0.0)(默认⼦⽹掩码:255.0.0.0或 0xFF000000)第⼀个字节为⽹络号,后三个字节为主机号。该类IP地址的最前⾯为“0”,所以地址的⽹络号取值于1~126之间。⼀般⽤于⼤型⽹络。
  B类:(128.0.0.0-191.255.0.0)(默认⼦⽹掩码:255.255.0.0或0xFFFF0000)前两个字节为⽹络号,后两个字节为主机号。该类IP地址的最前⾯为“10”,所以地址的⽹络号取值于128~191之间。⼀般⽤于中等规模⽹络。
  C类:(192.0.0.0-223.255.255.0)(⼦⽹掩码:255.255.255.0或 0xFFFFFF00)前三个字节为⽹络号,最后⼀个字节为主机号。该类IP地址的最前⾯为“110”,所以地址的⽹络号取值于192~223之间。⼀般⽤于⼩型⽹络。
  D类:是多播地址。该类IP地址的最前⾯为“1110”,所以地址的⽹络号取值于224~239之间。⼀般⽤于多路⼴播⽤户[1]  。
  E类:是保留地址。该类IP地址的最前⾯为“1111”,所以地址的⽹络号取值于240~255之间。
  在IP地址3种主要类型⾥,各保留了3个区域作为私有地址,其地址范围如下:
  A类地址:10.0.0.0~10.255.255.255
  B类地址:172.16.0.0~172.31.255.255
  C类地址:192.168.0.0~192.168.255.255
  回送地址:127.0.0.1。也是本机地址,等效于localhost或本机IP。⼀般⽤于测试使⽤。例如:ping 127.0.0.1来测试本机TCP/IP是否正常。
4、数据链路层:为上层提供可靠的数据帧透明传输
  链路管理、帧同步、寻址、流量控制、差错控制 
  MAC地址(⽹卡编号):48位的⼆进制数。表⽰为12位的16进制数。分为两部分:前24位为⼚商编号,后24位为⽹卡的编号(由专门的机构分配)⼆、TCP/IP各层数据封装过程
封装流程图
  UDP 数据与TCP 数据基本⼀致,唯⼀不同的是,UDP 传给IP 的信息单元称为UDP 数据包,并且UDP 的⾸部长为8字节。
  在上⾯的TCP 、IP 的分层结构图中我们可以看见,⽤户程序、TCP 、UDP 、ICMP 等都会向IP 传送数据,因此在IP 的⾸部加⼊了长度为8bit 的标识;1表⽰ICMP 协议,2表⽰IGMP 协议,6表⽰TCP ,17表⽰UDP 协议。
  TCP 、和UDP 在传送数据的过程中都会⽤到⼀个16bit 的端⼝号来表⽰不同的应⽤程序TCP 和UDP 把源端⼝号和⽬的端⼝号分别存⼊报⽂⾸部中。(216= 65536)
  ⽹络接⼝通常要发送和接收IP 、ARP 、RARP 数据,因此在以太⽹的⾸部(及帧的⾸部)也有⼀个16bit 的标识。
数据封装过程
三、各层数据包的结构
  1、(链路层)以太帧结构()
字段
含义前同步码
⽤来使接收端的适配器在接收 MAC 帧时能够迅速调整时钟频率,使它和发送端的频率相同。前同步码为 7 个字节,1 和 0 交替。帧开始定界
帧的起始符,为 1 个字节。前 6 位 1 和 0 交替,最后的两个连续的 1 表⽰告诉接收端适配器:“帧信息要来了,准备接收”。⽬的地址
接收帧的⽹络适配器的物理地址(MAC 地址),为 6 个字节(48 ⽐特)。作⽤是当⽹卡接收到⼀个数据帧时,⾸先会检查该帧的⽬的地址,是否与当前适配器的物理地址相同,如果相同,就会进⼀步处理;如果不同,则直接丢弃。源地址
发送帧的⽹络适配器的物理地址(MAC 地址),为 6 个字节(48 ⽐特)。类型上层协议的类型。由于上层协议众多,所以在处理数据的时候必须设置该字段,标识数据交付哪个协议处理。例如,字段为
0x0800 时,表⽰将数据交付给 IP 协议。
也称为效载荷,表⽰交付给上层的数据。以太⽹帧数据长度最⼩为 46 字节,最⼤为 1500 字节。如果不⾜ 46 字节时,会填充
  2、(⽹络层)IP 数据报结构
()
  如图,⼀个刻度表⽰1个⼆进制位(⽐特)。
  1-1.版本4位,表⽰版本号,⽬前最⼴泛的是4=B1000,即常说的IPv4;相信IPv6以后会⼴泛应⽤,它能给世界上每个纽扣都分配⼀个IP 地址。
  1-2.头长4位,数据包头部长度。它表⽰数据包头部包括多少个32位长整型,也就是多少个4字节的数据。⽆选项则为5(红⾊部分)。
  1-3.服务类型,包括8个⼆进制位,每个位的意义如下:
过程字段:3位,设置了数据包的重要性,取值越⼤数据越重要,取值范围为:0(正常)~ 7(⽹络控制)
延迟字段:1位,取值:0(正常)、1(期特低的延迟)
流量字段:1位,取值:0(正常)、1(期特⾼的流量)
可靠性字段:1位,取值:0(正常)、1(期特⾼的可靠性)
成本字段:1位,取值:0(正常)、1(期特最⼩成本)
保留字段:1位 ,未使⽤
  1-4.包裹总长16位,当前数据包的总长度,单位是字节。当然最⼤只能是65535,及64KB 。
  2-1.重组标识16位,发送主机赋予的标识,以便接收⽅进⾏分⽚重组。
  2-2.标志3位,他们各⾃的意义如下:
保留段位(2):1位,未使⽤
不分段位(1):1位,取值:0(允许数据报分段)、1(数据报不能分段)
更多段位(0):1位,取值:0(数据包后⾯没有包,该包为最后的包)、1(数据包后⾯有更多的包)
  2-3.段偏移量13位,与更多段位组合,帮助接收⽅组合分段的报⽂,以字节为单位。
  3-1.⽣存时间8位,经常ping 命令看到的TTL (Time To Live )就是这个,每经过⼀个路由器,该值就减⼀,到零丢弃。
  3-2.协议代码8位,表明使⽤该包裹的上层协议,如TCP=6,ICMP=1,UDP=17等。
  3-3.头检验和16位,是IPv4数据包头部的校验和。
  4-1.源始地址,32位4字节,我们常看到的IP 是将每个字节⽤点(.)分开,如此⽽已。
  5-1.⽬的地址,32位,同上。
  6-1.可选选项,主要是给⼀些特殊的情况使⽤,往往安全路由会当作攻击⽽过滤掉,普联(TP_LINK )的TL-ER5110路由就能这么做。
  7-1.⽤户数据。
  3、(传输层)tcp 数据包结构
()
  1-1.源始端⼝16位,范围当然是0-65535啦。
  1-2.⽬的端⼝,同上。
  2-1.数据序号32位,TCP 为发送的每个字节都编⼀个号码,这⾥存储当前数据包数据第⼀个字节的序号。
  3-1.确认序号32位,为了安全,TCP 告诉接受者希望他下次接到数据包的第⼀个字节的序号。
  4-1.偏移4位,类似IP ,表明数据距包头有多少个32位。
  4-2.保留6位,未使⽤,应置零。
  4-3.紧急⽐特URG—当URG =1时,表明紧急指针字段有效。它告诉系统此报⽂段中有紧急数据,应尽快传送(相当于⾼优先级的数据)。
  4-3.确认⽐特ACK—只有当ACK =1时确认号字段才有效。当ACK =0时,确认号⽆效。参考TCP 三次握⼿
  4-4.复位⽐特RST(Reset) —当RST =1时,表明TCP 连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建⽴运输连接。参考TCP 三次握⼿  4-5.同步⽐特SYN—同步⽐特SYN 置为1,就表⽰这是⼀个连接请求或连接接受报⽂。参考TCP 三次握⼿
  4-6.终⽌⽐特FIN(FINal)—⽤来释放⼀个连接。当FIN =1时,表明此报⽂段的发送端的数据已发送完毕,并要求释放运输连接。
  4-7.窗⼝字段16位,窗⼝字段⽤来控制对⽅发送的数据量,单位为字节。TCP 连接的⼀端根据设置的缓存空间⼤⼩确定⾃⼰的接收窗⼝ ⼤⼩,然后通知对⽅以确定对⽅的发送窗⼝的上限。
  5-1.包校验和16位,包括⾸部和数据这两部分。在计算检验和时,要在TCP 报⽂段的前⾯加上12字节的伪⾸部。
tcp ip协议下载  5-2.紧急指针16位,紧急指针指出在本报⽂段中的紧急数据的最后⼀个字节的序号。
  6-1.可选选项24位,类似IP ,是可选选项。
  6-2.填充8位,使选项凑⾜32位。
  7-1.⽤户数据数据到最⼩长度。最⼤值也叫最⼤传输单元(MTU )。
在 Linux 中,使⽤ ifconfig 命令可以查看该值,通常为 1500。
帧检验序列FCS
检测该帧是否出现差错,占 4 个字节(32 ⽐特)。发送⽅计算帧的循环冗余码校验(CRC )值,把这个值写到帧⾥。接收⽅
计算机重新计算 CRC ,与 FCS 字段的值进⾏⽐较。如果两个值不相同,则表⽰传输过程中发⽣了数据丢失或改变。这时,就
需要重新传输这⼀帧。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。