tcp/ip网络协议基础知识总结

1,TCP/IP模型:
在这里插入图片描述
有些地方把接入层也称为接口层。
2,TCP协议
TCP是一种可靠的,面向连接的服务协议。
TCP头:
在这里插入图片描述
其中的长度为头部的长度,单位是4字节。通常为5, 即TCP头长度为20.
3,UDP协议
UDP 是一种不可靠,无连接的,尽力转发的数据服务协议。
优点: 不需先建立连接,直接传输数据,开销小,小数据量发送时具有更好的性能优势。
在这里插入图片描述

UDP长度: 以字节为单位,整个段长度,包含数据段。
UDP的校验和是一个端到端的校验和,由发送端计算,接收端验证,但其检测不出交换俩个16bit的差错。
4,IP协议
IP地址分类:
在这里插入图片描述
IP头部:
在这里插入图片描述
在这里插入图片描述

5,以太网帧结构:
Ethernet II :
在这里插入图片描述
Ethernet_802.3:
在这里插入图片描述
通常在目标地址前还含有:前导同步码(7字节),帧开始码(1字节),这8个字节在物理层会自动过滤掉,故不计算在头部。
故以太网帧头部总长度为6+6+2+4=18字节。
Ethernet II类型以太网帧的最小长度为64字节(6+6+2+46+4),最大长度为1518字节(6+6+2+1500+4)。这是物理特性决定的。
(1) 前12字节分别标识出发送数据帧的源节点MAC地址和接收数据帧的目标节点MAC地址。
(2) 接下来的2个字节标识出以太网帧所携带的上层数据类型,类型字段的最小值是0x0600[大于1500, 根据这一点可以区分Ethernet II和Ethernet_802.3].
0x0800   IP协议数据,
0x86dd   IPv6协议数据,
0x809B   AppleTalk协议数据,
0x8138   Novell类型协议数据等。
0x0806   ARP
0x0600   XNS (Xerox)
0x6003   DECNET
(3)Ethernet V2可以装载的最大数据长度是1500字节,而IEEE 802.3可以装载的最大数据是1492字节(SNAP)或是1497字节
(4)后来为解决Ethernet II与802.3帧格式的兼容问题,推出折衷的Ethernet SNAP格式 。
在这里插入图片描述
对于小于或者大于这个大小范围的以太网帧,一般的以太网转发设备都会丢弃这些数据帧。由于以太网Ethernet最大的数据帧长是1518 Bytes这样,刨去以太网帧的帧头(目标、源、类型共计14字节)14 Bytes和帧尾CRC校验部分FCS 4 Bytes,那么承载上层协议的Data域最大就只能有1500 Bytes。而这个值就是我们称之为MTU。
6,数据在各层的格式:

在这里插入图片描述

7,数据经过各层协议过程如下:
在这里插入图片描述
8,MTU与MSS的关系
MTU,即最大传输单元,这是一个数据链路层的概念,限定的是链路层数据帧长度。
MSS: Management Support System 最大报文长度
MTU与MSS的关系可以简单理解为:
MTU= MSS+TCP层头部长度+IP层头部长度 (MSS是指应用层在一个数据包内最大能传输的字节数,MTU是指IP层在一个数据包内最大能传输的字节数)
如MTU=1500
对于TCP:
MSS = 1500-20(TCP头)-20(IP头)=1460
对于UDP:
MSS = 1500-8(UDP头)-20(IP头)=1472
9,以太网帧的最小报文为46字节来由
以太网最小长度为64字节的来由:
按照标准, 10Mbps以太网最小发送时间为51.2微秒,称之为以太网时隙,此段时间所能传输的数据位为512 bit,即512/8=64 byte。
64-6(目的地址)-6(源地址)-2(长度)-4(crc)=46字节
但不同的抓包软件抓到的最小长度也有差别,当长度小于46字节是,wireshark有填充数据,sniffer却没有填充数据。
为何抓包时抓到的最大帧是1514字节:
物理层上网卡会先把前导同步码(7字节),帧开始码(1字节)去掉,并进行CRC校验,校验未通过,丢弃此数据。
抓包软件同时也会将CRC去掉,这样抓包得到的1526-7-1-4=1514字节
MSS的值是再SYN段进行协商的。
10,IP分片
通常要传输的报文其大小都要超过MTU,此时就要进行IP分片。IP协议在传输数据包时,将报文分成若干分片进行传输,每一片都有自己的IP头。但是,即使只丢失一片数据,也要重传整个数据报,因为IP层本身没有重传机制。
在这里插入图片描述
下面是windows下,不允许分片时,数据长度大于MTU的情形:
在这里插入图片描述
分片图例:
在这里插入图片描述

使用UDP很容易导致IP分片,但TCP避免了IP分片,因为一旦TCP数据过大,超过了MSS,则在传输层对TCP包进行分段,每段到了IP层数据就不会超过MTU.
11,数据包的截断
POSIX系列的recv,fecvfrom, read函数均无法得到数据包被截断的错误消息,但recvmsg(int socket,struct msghdr *message,int flags)如message->msg_flags &MSG_TRUNC为真,则表示数据包被截断。
12,广播、组播
广播:
主机对某一网络上的所有主机发送数据包,此网络可能是网络也可能是子网。一般ARP是以广播形式传输的。
A类IP广播的地址是10.255.255.255 or 10.10.subnetid.255
C类IP广播的地址是192.x.x.255
组播: 即多播
给一组特定的主机发送数据。
多播的地址是D类IP,规定是224.0.0.0 ~ 239.255.255.255

猜你喜欢

转载自blog.csdn.net/marcosun_sw/article/details/85993387
今日推荐