(会持续更新, 当掌握到更多的链路层的相关知识时会继续补充)
在T C P / I P协议族中,链路层主要有三个目的:
??TCP/IP支持多种不同的链路层协议,这取决于网络所使用的硬件,如以太网、令牌环网、F D D I(光纤分布式数据接口)及 R S-2 3 2串行线路等
此文讨论以下3个内容:
以太网采用一种称作CSMA/CD的媒体接入方法
在T C P / I P世界中,以太网I P数据报的封装是在RFC 894[Hornig 1984]中定义的, 而在IEEE 802
网络的I P数据报封装是在RFC 1042[Postel and Reynolds 1988] , 最常使用的封装格式是 RFC 894定义的格式
IEEE 802.2/802.3(RFC 1042)和以太网的封装格式(RFC 894)
幸运的是, 8 0 2定义的有效长度值与以太网的有效类型值无一相同,这样,就可以对两种帧格式进行区分
??在以太网帧格式中,类型字段之后就是数据;而在 8 0 2帧格式中,跟随在后面的是 3字节的802.2 LLC和5字节的802.2 SNAP。 DSAP和SSAP的值都设置为0xaa
RFC 893[Leffler and Karels 1984]描述了另一种用于以太网的封装格式,称作尾部封装(trailer encapsulation)。这是一个早期B S D系统在DEC VA X机上运行时的试验格式,
它通过调整I P数据报中字段的次序来提高性能, 现在,尾部封装已遭到反对,因此我们不对它举任何例子。
SLIP的全称是Serial Line IP。它是一种在串行线路上对 I P数据报进行封装的简单形式,在
RFC 1055[Romkey 1988]中有详细描述。
一种在串行线路上对IP数据包进行封装的简单形式
??SLIP一般提供基于服务类型的排队方法. 允许对交互通信数据在处理大块数据之前进行处理。由于大多数的实现都不使用 TO S字段,因此这种排队机制由S L I P自己来判断和处理,驱动程序先查看协议字段(确定是否是一个 T C P段),然后检查T C P信源和信宿的端口号,以判断是否是一个交互服务。
S L I P是一种简单的帧封装方法,还有一些值得一提的缺陷
尽管存在这些缺点,S L I P仍然是一种广泛使用的协议
PPP点对点协议修改了SLIP协议中的所有缺陷。PPP包括以下三个部分
??尽管P P P比S L I P有更多的优点,但是现在的S L I P用户仍然比P P P用户多。随着产品越来越多,产家也开始逐渐支持PPP,因此最终PPP应该取代SLIP
A类网络号127就是为环回接口预留的。根据惯例,大多数系统把IP地址127.0.0.1分配给这个接口,并命名为localhost。一个传给环回接口的IP数据报不能在任何网络上出现, 一旦传输层检测到目的端地址是环回地址时,应该可以省略部分传输层和所有网络层的逻辑操作
但是大多数的产品还是照样完成传输层和网络层的所有过程,只是当IP数据报离开网络层时把它返回给自己
环回接口处理IP数据报的过程
??如果 IP层有一个数据报要传,而且数据的长度比链路层的 MTU还大,那么IP层就需要进行分片,把数据报分成若干片,这样每一片都小于MTU。
可以用netstat命令打印出网络接口的M T U
路径MTU
但是如果两台主机之间的通信要通过多个网络,重要的不是两台主机所在网络的 M T U的值,重要的是两台通信主机路径中的最小 M T U
以上是当今TCP/IP所采用的部分数据链路公共技术。TCP/IP成功的原因之一是它几乎能在任何数据链路技术上运行。
??IP是TCP/IP协议族中最为核心的协议。所有的TCP、UDP、IMP及IGMP数据都以IP数据报格式传输
??不可靠(unreliable)的意思是它不能保证IP数据报能成功地到达目的地。IP仅提供最好的传输服务。如果发生某种错误时,如某个路由器暂时用完了缓冲区,IP有一个简单的错误处理算法:丢弃该数据报,然后发送ICMP消息报给信源端。任何要求的可靠性必须由上层来提供(如TCP)。
??无连接(connecltionless)这个术语的意思是IP并不维护任何关于后续数据报的状态信息。每个数据报的处理是相互独立的。这也说明,IP数据报可以不按发送顺序接收。如果一信源向相同的信宿发送两个连续的数据报(先是A,然后是B),每个数据报都是独立地进行路由选择,可能选择不同的路线,因此B可能在A到达之前先到达。
普通的IP首部长为2 0个字节,除非含有选项字段。
IP数据报格式及首部中的各字段
??由于T C P / I P首部中所有的二进制整数在网络中传输时都要求以big endian字节序,因此它又称作网络字节序。
首部长度 指的是首部占
由于它是一个 4比特字段,因此首部最长为6 0个字节。在第8章中,我们将看到这种限制使某些选项如路由记录选项在当今已没有什么用处。普通IP数据报(没有任何选择项)字段的值是 5 (20个字节)
\[5\times 32 \div 8 = 20\]
\[(2^4-1)\times 32 \div 8 = 60\]
服务类型(TO S)字段包括一个3 bit的优先权子字段(现在已被忽略)
现在大多数的T C P / I P实现都不支持TO S特性
服务类型字段推荐值
总长度字段 是指整个 I P数据报的长度,以字节为单位
利用首部长度字段和总长度字段,就可以知道 I P数据报中数据内容的起始位置和长度。当数据报被分片时,该字段的值也随着变化
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.0.1 0.0.0.0 UG 600 0 0 wlp4s0
169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 wlp4s0
172.16.93.0 0.0.0.0 255.255.255.0 U 0 0 0 vmnet8
192.168.0.0 0.0.0.0 255.255.255.0 U 600 0 0 wlp4s0
192.168.124.0 0.0.0.0 255.255.255.0 U 0 0 0 vmnet1
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default _gateway 0.0.0.0 UG 600 0 0 wlp4s0
link-local 0.0.0.0 255.255.0.0 U 1000 0 0 wlp4s0
172.16.93.0 0.0.0.0 255.255.255.0 U 0 0 0 vmnet8
192.168.0.0 0.0.0.0 255.255.255.0 U 600 0 0 wlp4s0
192.168.124.0 0.0.0.0 255.255.255.0 U 0 0 0 vmnet1
??后三条是自动生成的,因为是直连的网段,不需要走三层,直接走二层协议,在每块网卡上每配置一个IP就会生成一条记录(一个网卡上可以配置多个IP)。表示去往这两个网段的数据包,直接由网卡接口ens33及ens37发送出去
??这两条记录中的gateway并没有意义,Flags那一列中有G时才会使用Gateway。这两条路由并没有这样的标志,由于它们是本地的,匹配这些条目的数据包会直接通过Iface列中的网卡发送出去。
后两条表达的意思:
192.168.0.0 ? 10.77.238.254 ?255.255.0.0 ? ? UG ? ?0 ? ? 0 ? ?0 ?eth0
表示去往192.168.0.0网段的数据包由网关10.77.238.254通过网卡eth0来转发
0.0.0.0 ? ? ? 169.254.0.0 ? ?0.0.0.0 ? ? ? ? UG ? ?0 ? ? 0 ? ?0 ?eth1
表示去往所有目标地址数据包由网关169.254.0.0 通过网卡eth1来转发
?
原文:https://www.cnblogs.com/Kimbing-Ng/p/12316767.html