《unix网络编程》(2)网络模型和协议概述 女爷i 2022-08-07 05:48 175阅读 0赞 # OSI模型 # OSI(open system interconnection)开放系统互联模型是由ISO(国际标准化组织,International Organization for Standardization)定义的网络分层模型,共七层。 ![Center][] 网络层由IPv4和IPv6两个协议处理。可以选择的传输层协议有TCP和UDP。上图的TCP与UDP之间留有空隙,表明网络应用可以绕过传输层直接使用IPv4或IPv6,这就是**原始套接字(raw socket)**。 这里所讲的套接字是从顶上三层(网际协议的应用层)进入传输层的接口。这里的焦点是:如何使用套接字编写使用TCP或UDP的网络应用程序。原始套接字甚至可以绕过IP层直接读写数据链路层的帧。 **为什么套接字是从OSI模型顶上三层(网际协议的应用层)进入传输层的接口?** **答案**:这样设计两个理由:第一是顶上三层处理具体网络应用(FTP、Telent或HTTP)的所有细节,却对通信细节了解很少;底下四层对具体网络应用了解不多,却处理所有的通信细节:发送数据、等待确认、给无序到达的数据排序、计算并验证校验和等。第二,顶三层通常构成所谓用户进程,底下四层通常作为操作系统内核的一部分提供。Unix与其他现代操作系统都提供分隔用户进程与内核的机制,因此可见,第4和5层之间的接口是构建API的自然位置。 # UDP # UDP的首部: ![Center 1][] UDP伪首部: 12字节的伪首部是为了计算检验和而设置的。伪首部包含IP首部的部分字段,其目的是让UDP两次检查数据是否已经正确到达目的地。 ![Center 2][] # TCP报文段 # 网络数据包封装格式: ![Center 3][] ![Center 4][] ![Center 5][] ![Center 6][] ![Center 7][] # IP数据报 # IPv4数据报格式: ![Center 8][] 各个字段含义: ![Center 9][] ![Center 10][] # 以太网帧格式 # //以太网首部代码 struct ethernet_hdr { char dest_mac[6]; char src_mac[6]; short protocol; }; ![Center 11][] 以太网帧中的数据长度规定最小46 字节,最大1500 字节,ARP 和RARP 数据包的长度不够46 字节,要在后面补填充位。最大值1500 称为以太网的最大传输单元(MTU),不同的网络类型有不同的MTU,如果一个数据包从以太网路由到拨号链路上,数据包度大于拨号链路的MTU了,则需要对数据包进行分片fragmentation)。 [Center]: /images/20220805/d63d00eafdc54e268d5ec8769d03c48c.png [Center 1]: /images/20220805/7e736a1e9d0f41f8a315bfea5331e712.png [Center 2]: /images/20220805/3c1d8b2303c34869b045eee159a45704.png [Center 3]: /images/20220805/1c7b7508073b4c47b5e2a18854eb2065.png [Center 4]: /images/20220805/c80ac3c19d5e4c9dbbf35d4ab4b5ae69.png [Center 5]: /images/20220805/fc667ca89bbf4659b05bdec1079bc606.png [Center 6]: /images/20220805/ae46c235b4f14ca3966dc396e7725d7f.png [Center 7]: /images/20220805/cf3e6892c0fa4a4e93e61c7c5725f8ee.png [Center 8]: /images/20220805/759a306ebaa0434f8cdc78cf36030480.png [Center 9]: /images/20220805/ed40174163924ae0a9c8b7d2feaf0920.png [Center 10]: /images/20220805/9599dbf0d1fb4c95851bb42c454c45be.png [Center 11]: /images/20220805/6855ec727f7349c2ab5dce476cbca9fd.png
还没有评论,来说两句吧...