您的位置:首页 > 理论基础 > 计算机网络

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

2015-03-16 20:57 267 查看

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)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: