消息边界应用层将协议携带的数据写入消息,消息边界是两次写入操作之间的位置或字节偏移量 。
保留消息边界的协议(UDP)在接收方能获得发送方的消息边界,而不保留消息边界的协议(TCP)在接收方将不能获得发送方的消息边界 。
文章插图
比如发送端通过UDP协议先后发送2个大小分别为100、200字节的消息,接收端通过UDP协议接收数据,将分2次分别接收到100、200字节的消息,但不保证接收100、200消息的先后顺序 。
而TCP是数据流协议,如果发送端通过TCP协议先后发送2个大小为100和200字节的消息,接收端会收到300字节数据,但每次接收返回的不一定是100、200字节消息,接收端丢失了发送端的消息边界 。
网络地址IP地址用于IP层,IPv4的IP地址是32位整数,最多可以表示40多亿个IP地址,按8位一字节,则分为4字节,每个字节是一个0~255的无符号整数,所以可以表示为“abc.def.ghi.jkl”的点分十进制格式,也可以表示为32位无符号整数 。
点分十进制和无符号32位无符号整数可以很容易换算 。
IPv4地址空间分成五大类,A、B、C类用于Internet单播,D类地址供组播使用,E类地址保留 。
IPv4的32位又被划分为网络号和主机号,可以把网络号想象成到小区的邮政地址,而主机号想象成房间号 。
文章插图
【IP 通俗易懂网络协议】
链路层使用48bit的mac地址,ARP和RARP用于IP地址和MAC地址之间的相互换算 。
应用程序编程接口操作系统通过提供编程接口(API)来支持应用程序的网络开发,目前最流行的API是套接字(Socket),也叫Berkeley套接字 。
Socket抽象层位于应用层跟传输层之间,提供创建、绑定、监听、连接、发送、接收、关闭等常用方法 。
文章插图
Internet协议IP是TCP/IP协议族中的核心协议,为传输层提供IP数据报的交付能力,它负责将IP数据报从网络一端传递到另一端,实现数据转发 。
IP的另一个作用是:在发送端,接收来自传输层的协议数据单元(PDU),添加IP首部封装为IP数据报,交给协议族的下一层链路层 。
在接收端(包括中间路由器),接收来自链路层的PDU,去掉IP首部,根据IP首部中的协议类型,将数据分发给TCP、UDP或者其他 。
IP只是完成分组交换(转发),如果你希望得到可靠性保证,IP会说:对不起,做不了 。
发送一个IP数据报犹如寄一个快递,只需把目的地收件人写在快递上,快递公司会路由分发,但中间有可能丢件,丢了不管,而且到了,也不会有确认,一切随缘 。
基于TCP/IP协议族构建的网络,可以区分为端系统(两边的主机)和中间系统(中间路由器),端主机实现网络所有层,而路由器实现传输层之下的所有层,IP使用逐跳协议,IP之上的各层使用端到端协议 。
路由器路由器工作于网络层,是IP层的核心设备 。
路由器有两个或两个以上的网络接口,用于连接两个或多个网络,负责将IP数据报(分组)从一个网络接口转发到另一个网络接口 。
带有多网络接口(网卡)的主机也能承担转发分组的功能,这种主机称为作为路由器使用的主机 。
文章插图
如果把一个村庄比喻成一个小的局域网,那路由器就相当于连接村庄的桥梁,路由器属于中间系统,所以连接不同网络的路由器需要实现不同的链路层协议,完成不同链路层的翻译转换功能 。
另一方面,路由器实现链路层+网络层这2层就够了,而不必实现传输层和应用层,这是由它的功能(实现分组交换)决定的 。
每个IP分组都是一个IP数据报,包含发送方和接收方的第三层地址(IP地址),即32位的IPv4或128位的IPv6,IP数据报首部中的目的地址决定将该数据报发往何处,而做出决定和发送数据报到下一跳的过程叫转发,转发依赖于路由表,是存储于内存中的一个数据结构 。
IP协议格式在贴出IP协议格式之前,我们可以设想一下,IP协议需要包括哪些信息,这比直接上图+死记硬背要好 。
根据之前封装的描述,显然,IP数据报应该是包括IP首部+数据负载,而这个不透明的负载(Payload)来自于TCP、UDP或者其他 。
所以我们讲IP数据报格式,其实就是IP首部的组成和结构,因为数据负载来自于上层,而封装的本质要求上层的数据对下层隐藏、无须解释,既然IP的Payload对于IP层透明,那自然没什么可讲的 。
推荐阅读
- 「网络特效」12 个炫酷背景特效库
- 什么时计算机网络?计算机网络如何分类?
- https ssl 请求过程详解
- 高校|一二三未来:高校毕业生求职的“专属网络面试间”
- rtsp协议之dss服务器与vlc服务器比较
- 如何知道网络的实时网速?4种方法轻松查询
- rtsp协议之dss搭建rtsp服务器
- Antrea 0.9.0 发布,Kubernetes 网络解决方案
- 盘点网络创业需要的重要营销工具
- 什么是DNS?