TCP、UDP协议

协议介绍

TCP协议介绍

TCP是一种面向连接(连接导向)的、可靠的基于字节流的传输层通信协议。TCP将用户数据打包成报文段,发送后会启动一个定时器,然后另一端收到的数据进行确认、对失序的数据重新排序、丢弃重复数据。

UDP协议介绍

UDP(User Datagram Protocol),用户数据报协议,是 OSI(Open System Interconnection,开放式系统互联) 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。

二者对比:

TCP协议分析

先来看一下TCP头部格式:

下面我们来进行具体的字段介绍:
一共20个字节,4个字节(32位)为一层,共5层。下面我们分层来介绍,为了方面记忆。

第一层:————-

  • 源端口( 16 位):通信发送方使用的端口号
  • 目标端口( 16 位):通信接收方使用的端口号

第二层:————-

  • 序列号( 32 位):用来确保数据可靠传输的唯一值

第三层:————-

  • 确认号( 32 位):接收方在响应时发送的数值,是对接收到的数据的确认。

第四层:————-

  • 数据偏移( 4 位):标志数据包开始的位置,TCP 头部的长度
  • SYN:(同步)发起连接的数据包:同步 SYN=1 表示这是一个连接请求或连接接受报文。
  • ACK:(确认)确认收到的数据包:只有当 ACK=1 时,确认号字段才有效;当 ACK=0 时,确认号无效。
  • RST:(重置)之前尝试的连接被关闭,(信号差,信号拥挤):当 RST=1 时,表明 TCP 连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接。
  • FIN:(结束)连接成功,传输完毕之后,连接正在断开:用来释放一个连接,FIN=1 表明此报文段的发送端的数据已发送完毕,并要求释放运输连接。
  • PSH:(推送)数据包直接发送给应用,而不是缓存起来:接收 TCP 收到 PSH=1 的报文段,就尽快地交付接收应用进程,而不再等到整个缓存都填满了后再向上交付。
  • URG:(紧急)数据包中承载的内容应该立即由 TCP 协议栈立即进行处理:当 URG=1 时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据)。
  • 窗口大小( 16 位):匹配缓存区的大小

:SYN、ACK、RST、FIN、PSH、 URG为标记字段(各占1位存储空间)

第五层:————-

  • 校验和( 16 位):确认 TCP 数据段中的内容是否发送了变化
  • 紧急指针( 16 位):明确显示数据之前的 16 进制序列号

以下在某TCP报文在wireshark协议解码窗口中的解析情况:

其中flags部分展开如下:


UDP协议分析

先来看一下TCP头部格式:


与TCP协议相比这个协议的头部就很简单了,当然这也和它们各自的用途有关。

下面我们来进行具体的字段介绍:
一共8个字节,分为4个部分。
dd

  • 源端口: 源端口号,需要对方回信时选用,不需要时全部置 0 ;
  • 目的端口:目的端口号,在终点交付报文的时候需要用到;
  • 长度:UDP 的数据报的长度(包括首部和数据)其最小值为 8(只有首部)。字段记录了该 UDP 数据包的总长度(以字节为单位),包括 8 字节的 UDP 头和其后的数据部分。最小值是 8(报文头的长度),最大值为 65535 字节;
  • 校验和:检测 UDP 数据报在传输中是否有错,有错则丢弃。它的值是通过计算 UDP 数据报及一个伪包头而得到的。校验和的计算方法与通用的一样,都是累加求和。

:端口是用来指明数据的来源(应用程序)以及数据发往的目的地(同样是应用程序)。字段包含了 16 比特的 UDP 协议端口号,它使得多个应用程序可以多路复用同一个传输层协议及 UDP 协议,仅通过端口号来区分不同的应用程序。

IP协议

IP协议介绍

一个IP数据报包括“报头”和“数据”这两个组成部分,其中:

  • 数据部分就是来自传输层的完整数据段;
  • 报头部分是为了正确传输数据报而增加的网络层IPv4协议信息,主要是源和目的网络的IP地址及控制信息。

IPv4协议头(20个字节:5段32位)

  1. 版本:ip报文中,版本占了4位,用来表示该协议采用的是哪一个版本的ip,相同版本的ip才能进行通信。一般此处的值为4,表示ipv4。
  2. 头长度:该字段用四位表示,表示整个ip包头的长度,其中数的单位是4字节。即二进制数0000-1111(十进制数0-15),其中一个最小长度为0字节,最大长度为60字节。一般来说此处的值为0101,表示头长度为20字节。
  3. Tos服务字段:该字段用8位表示。该字段一般情况下不使用。
  4. 总长度:该字段表示整个ip报文的长度,单位是1字节。能表示的最大字节为2^16-1=65535字节。不过由于链路层的MTU限制。超过1480字节后就会被分片(以太帧MTU为1500的情况下,除去20字节的包头)

  1. 标识2个字节16位,该字段是ip软件实现的时候自动产生的,该字段的目的不是为了接受方的按序接受而设置的,而是在ip分片以后,用来标识同一片分片的。方便ip分片的重组。
  2. 标志:该字段是与ip分片有关的。其中有三位,但只有两位是有效的,分别为MF,DF,MF。MF标识后面是否还有分片,为1时,表示后面还有分片。DF标识是否能分片,为0表示可以分片
  3. 片偏移:该字段是与ip分片后,相应的ip片在总的ip片的位置。该字段的单位是8字节。比如,一个长度为4000字节的ip报文,到达路由器。这是超过了链路层的MTU,需要进行分片,4000字节中,20字节为包头,3980字节为数据,需要分成3个ip片(链路层MTU为1500),那么第一个分片的片偏移就是0,表示该分片在3980的第0位开始,第1479位结束。第二个ip片的片偏移为185(1480/8),表示该分片开始的位置在原来ip的第1480位,结束在2959。第三片的片偏移为370(2960/8),表示开始的时候是2960位,结束的时候在3979位。

  1. TTL:该片表示生存周期,该值占8位。ip分片每经过一个路由器该值减一,它的出现是为了防止路由环路,浪费带宽的问题。比如,该ip在R1路由器发送到R2路由器。R2路由器又发给R1路由器。防止这种循环。window系统默认为128.
  2. 协议:该值标识上层的协议。占8位。其中1,标识ICMP、2标识IGMP、6标识TCP、17标识UDP、89标识OSPF。
  3. 校验和:该值是对整个数据包的包头进行的校验占16位

  1. 源地址和目的地址。标识发送ip片的源和目的ip,32位
  2. 可选项,一般一些特殊的要求会加在这个部分。

扩展:ICMP协议分析

ICMP协议介绍

网络本身是不可靠的,在网络传输过程中,可能会发生许多突发事件并导致数据传输失败。网络层的IP协议是一个无连接的协议,它不会处理网络层传输中的故障,而位于网络层的ICMP协议却恰好弥补了IP的缺限,它使用IP协议进行信息传递,向数据包中的源端节点提供发生在网络层的错误信息反馈。ICMP可以看作是IP协议的伴随协议。ICMP报文被封装在IP 数据报发送。

ICMP报文格式

  • 类型:标识生成的错误报文,它是ICMP报文中的第一个字段;
  • 代码:进一步地限定生成ICMP报文。该字段用来查找产生错误的原因;
  • 校验和:存储了ICMP所使用的校验和值。
  • 未使用:保留字段,供将来使用,起值设为0
  • 数据:包含了所有接受到的数据报的IP报头。还包含IP数据报中前8个字节的数据;

其中类型和代码最重要,通过其可以看到返回信息:

最后来看一个实际的抓包


Ethernet II帧格式

以太网中大多数的数据帧使用的是 Ethernet II 格式,其具体如下:

Ethernet II 类型以太网帧的最小长度为 64 字节(6+6+2+46+4),最大长度为 1518 字节(6+6+2+1500+4)。其中:
(1)前 12 字节分别标识出发送数据帧的源节点 MAC 地址和接收数据帧的目标节点 MAC 地址
(2)接下来的 2 个字节标识出以太网帧所携带的上层数据类型,如 16 进制数0x0800代表 IP 协议数据,
16 进制数0x86dd代表 IPv6 协议数据,16 进制数0x809B代表 AppleTalk 协议数据,16 进制数0x8138代表 Novell 类型协议数据等;
(3)在不定长的数据字段(Data):其长度是 46 至 1500 字节;
(4)4 个字节的帧校验序列(Frame. Check Sequence,FCS),采用 32 位 CRC 循环冗余校验对从“目标 MAC 地址”字段到“数据”字段的数据进行校验。

注:我们所获的MTU为1500字节,是不包含帧头和帧尾的,相当于1518-18.


ARP协议

协议介绍

地址解析的作用:协议地址和物理地址之间的转换,如IP地址和MAC地址之间的转换

地址解析必须在某一物理网络中进行,一台主机在向同一物理网络上的另一台计算机发送数据时,应先做地址解析,然后按物理地址直接发送数据帧.

工作流程

工作原理

一个ARP请求消息是一个数据帧,其中包含发送站点的MAC地址和IP地址,以及目的站点的IP地址,并把此数据帧在本物理网络内广播
一个ARP应答消息是一个数据帧,其中包含应答站点的MAC地址和IP地址,以及原发送站点的IP地址,并把此数据帧发送给原发送站点

ARP高速缓存

为了减少网络上的通信量,主机 A 在发送其 ARP 请求分组时,就将自己的 IP 地址到硬件地址的映射写入 ARP 请求分组。
当主机 B 收到 A 的 ARP 请求分组时,就将主机 A 的这一地址映射写入主机 B 自己的 ARP 高速缓存中。这对主机 B 以后向 A 发送数据报时就更方便了。

DNS介绍

基本概念介绍

  1. 域名:是由一串用点分隔的名字组成的Internet上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位(有时也指地理位置,地理上的域名,指代有行政自主权的一个地方区域)。

  2. DNS:映射域名与IP地址之间的对应关系

  3. 域名服务器:提供域名解析

DNS工作流程

通过UDP包传输请求和应答,看一个例子:

(1)用户发起请求后,主机会先查询浏览器缓存和本机操作系统缓存;

(2)本机没有记录,主机向本地服务器发起查询;

(3)本地服务器没有记录,会向根服务发起请求;

(4)根据根服务器返回的结果,本地服务器向对应的顶级服务器发起请求;

(5)根据顶级服务器返回结果,本地服务器向权威服务器发起请求;

(6)本地服务器将解析记录告知主机,并保存在本地缓存,以供下次使用。