《unix网络编程》(2)网络模型和协议概述

来源:互联网 发布:淘宝违规处罚 编辑:程序博客网 时间:2024/05/17 13:40

OSI模型

OSI(open system interconnection)开放系统互联模型是由ISO(国际标准化组织,International Organization for Standardization)定义的网络分层模型,共七层。

         网络层由IPv4和IPv6两个协议处理。可以选择的传输层协议有TCP和UDP。上图的TCP与UDP之间留有空隙,表明网络应用可以绕过传输层直接使用IPv4或IPv6,这就是原始套接字(raw socket)

        这里所讲的套接字是从顶上三层(网际协议的应用层)进入传输层的接口。这里的焦点是:如何使用套接字编写使用TCP或UDP的网络应用程序。原始套接字甚至可以绕过IP层直接读写数据链路层的帧。

        为什么套接字是从OSI模型顶上三层(网际协议的应用层)进入传输层的接口?

        答案:这样设计两个理由:第一是顶上三层处理具体网络应用(FTP、Telent或HTTP)的所有细节,却对通信细节了解很少;底下四层对具体网络应用了解不多,却处理所有的通信细节:发送数据、等待确认、给无序到达的数据排序、计算并验证校验和等。第二,顶三层通常构成所谓用户进程,底下四层通常作为操作系统内核的一部分提供。Unix与其他现代操作系统都提供分隔用户进程与内核的机制,因此可见,第4和5层之间的接口是构建API的自然位置。


UDP

UDP的首部:


UDP伪首部:

       12字节的伪首部是为了计算检验和而设置的。伪首部包含IP首部的部分字段,其目的是让UDP两次检查数据是否已经正确到达目的地。


TCP报文段

网络数据包封装格式:




IP数据报

IPv4数据报格式:

各个字段含义:



以太网帧格式

    //以太网首部代码      struct ethernet_hdr      {          char dest_mac[6];          char src_mac[6];          short protocol;      };  


     以太网帧中的数据长度规定最小46 字节,最大1500 字节,ARP 和RARP 数据包的长度不够46 字节,要在后面补填充位。最大值1500 称为以太网的最大传输单元(MTU),不同的网络类型有不同的MTU,如果一个数据包从以太网路由到拨号链路上,数据包度大于拨号链路的MTU了,则需要对数据包进行分片fragmentation)。


0 0