文章插图
- 用户数据经过应用程序加上应用程序首部,转给TCP层处理
- 经过TCP层加上TCP首部,产生TCP段(segment)
- TCP segment经过IP层再加上IP首部,产生IP数据包(datagram)
- IP datagram通过链路层,经以太网驱动程序处理后,加上以太网首部+尾部,产生以太网帧(frame),以太网帧的长度在46~1500之间
UDP的封装跟TCP略有不同,主要体现在经过传输层(UDP)之后添加的是8字节UDP首部,产生UDP datagram 。
封装过程中,经过TCP/UDP层的时候,会把端口号添加到TCP/UDP首部;经过IP层的时候,会把协议类型(TCP or UDP or ICMP or IGMP)添加到IP首部;经过链路层的时候,会把帧类型(IP or ARP or RARP)添加到以太网首部 。这些信息将被用于接收端的处理 。
接收端收到数据后,要执行跟发送端相反的解封操作,我们可以把发送端的数据封装比喻成洗澡后一层层穿衣服,而接收端的操作,类似洗澡前一层层脱衣服,把首尾部剥离,获取传递的原始数据 。
因为网络上的主机有不同字节序,现在要通过网络传输,便需要约定统一的网络字节序(大端序),采用小端序的主机在网络传输数据的时候要转为大端序 。
地址
互联网上每个接口都有一个唯一的网络地址,也叫IP地址,IP地址有IPv4和IPv6两个版本,IPv4是32位4字节的整数,每个字节(8bit)的取值范围是0~255,所以可以把4字节的IPv4用四个点分隔的byte值表示,比如140.252.13.88,每个十进制数值对应32位整数中的每个字节,这种表示法叫点分十进制表示法,很显然,点分十进制法和int32两种表示法之间很容易相互转换 。
IPv4地址划分为ABCDE五类,32位地址表示的数值空间有限,难以为互联网上的所有联网设备分配独立的IP地址,所以便存在动态分配、共享、公网+内网地址转化(NAT)等问题,本质上是为了解决IP地址不够用的问题 。
IPv6使用128bit,2的128次方就非常大了,号称可以为地球上每粒沙子分配一个ip地址 。
IP数据报(网络层)用IP地址、而以太网帧(链路层)则是用硬件(48位Mac)地址,ARP和RARP用于IP地址和硬件地址之间做映射(转换) 。
端口
TCP/UDP采用16位端口号来识别(区分)应用,比如主机A向主机B发送了一个IP报,主机B的内核收到该IP报之后,应该交给哪个应用程序去处理呢?端口号就是用来干这个的,内核会维护端口号到应用程序之间的对应关系 。
比较常用的应用层协议有约定的端口号,也就是知名端口号,而1024~5000之间的端口号是分配给TCP/IP临时用的,而大于5000的另做他用 。也就是说,你用TCP方式去连网络服务器,本地为该socket分配的端口号会在1024~5000之间,这取决于操作系统的端口分配策略 。
域名系统
域名系统(DNS)提供主机名字和IP地址之间的转换,比如***是一个域名,应用程序可以通过一个标准库函数(gethostbyname)来获得给定名字主机的IP地址,标准库函数(gethostbyaddr)实现逆操作 。
ip地址是一串数字,含义不清、也不便于记忆,主机名含义更清晰,***你就很容易记住,这也是为什么存在IP地址还需要主机名的原因 。
分用
接收端接收到以太网数据帧(Frame)之后,需要像剥洋葱一样,从协议栈由底向上升,即遵照链路层->网络层->传输层->应用层的顺序,去掉各层协议添加的首尾部,将数据取出,交给最上层应用程序,这个过程叫Demultiplexing,尊从书本的翻译叫分用 。
推荐阅读
- freebuds3怎么调音量
- 如何设置电脑开机密码,可以怎么设置电脑开机密码
- png怎么转换成jpg,可以怎么将PNG转换成JPG
- 该怎样删除微博的评论,微博的评论怎么删除别人的评论
- 如何给电脑加密,电脑可以如何进行设置密码
- 三分钟带你了解steam的发展史
- 手机电池容量怎么看,手机怎么查看电池容量
- 苹果手机中要怎样静音,苹果手机怎么调静音模式
- 电脑锁屏密码怎么设置,电脑要怎样才可以设置密码
