1.Linux 高性能服务器编程 --- TCP/IP 协议族

1.TCP/IP 协议族
	1.1.4 应用层
		应用层负责处理应用程序的逻辑。数据链路层,网络层和传输层负责处理网络通信细节,这部分必须既稳定又高效,因此它们都在内核
	  空间中实现。应用层在用户空间实现,因为它负责处理众多逻辑,比如文件传输,名称查询和网络管理等。如果应用层也在内核中实现,
	  则会使得内核变的非常庞大。当然,也有少数服务器程序是在内核中实现的,这样代码就无需在用户空间和内核空间来回切换(主要是数据的
	  复制),极大的提高了工作效率。不过这种代码实现起来比较复杂,不够灵活,且不便于移植。

	1.2 封装
		上层协议是如何使用下层协议提供的服务的呢?是通过封装实现的。应用程序数据再发送到物理网络上之前,将沿着协议栈从上往下传递。每层协议都将在
	  上层数据的基础之前加上自己的头部信息(有时还有尾部信息),以实现该层的功能,这个过程就叫封装。
	    经过 tcp 封装后的数据就称为 tcp 报文段,或者简称tcp段。tcp 协议为通信双方维持一个连接,并且在内核中存储相关数据。这部分数据中的tcp头部
	  信息和 tcp 内核缓冲区(发送缓冲区或者接收缓冲区)数据一起构成了tcp报文段。

	    当发送端应用程序使用 send(或者 write) 函数向一个 tcp连接写入数据时,内核中的tcp模块首先把这些数据复制到与该连接对应的tcp内核发送缓冲区中,
	  然后tcp模块调用ip模块提供的服务,传递的参数包括tcp头部信息和 tcp 发送缓冲区中的数据,即 tcp报文段。

	    经过 udp 封装后的数据称为 udp 数据包。udp 对应程序数据的封装与 tcp 类似。不同的是,udp 无需为应用层数据保存副本,因为它提供的是不可靠的。
	  当一个udp数据包被发送成功后,udp 内核缓冲区中的该数据报文就被丢弃了。如果应用程序检测到该数据报未能正确被接收,并打算重新发送这个数据报,则应用
	  程序需要重新从用户空间将该数据拷贝到udp 内核发送缓冲区中。
	    经过 ip 封装后的数据成为 ip 数据报。ip数据报也包括头部信息和数据部分。其中数据部分就是一个tcp报文,udp数据报或者 icmp 报文。
	    经过数据链路层封装的数据成为帧。传输媒介不同,帧的类型也不同。比如,以太网上传输的是以太网帧,而令牌环网络上传输的则是另外环帧。

	    帧的最大传输单元(MTU),即帧能携带多少上层协议数据,通常受到网络类型的限制。以太网的 MTU 是1500字节。正因为如此,过长的IP数据报可能需要被分片。

	1.3 分用

	1.7 socket 与 TCP/IP 协议族的关系
		数据链路层,网络层,传输层协议是在内核中实现的。因此,操作系统需要实现一组系统调用,使得应用程序能够访问这些协议提供的服务。实现这组系统调用的
	  api主要有2套:socket 和 XTI。XTI基本不用。
	    由 socket 定义的这一组api提供如下2点功能:一是将应用程序数据从用户缓冲区中复制到 tcp/udp 内核发送缓冲区,以交付内核来发送数据(比如send),或者
	  是从内核 tcp/udp 接收缓冲区中复制数据到用户缓冲区,以读取数据;二是应用程序可以通过它们来修改内核中各层协议的某些头部信息或其他数据结构,从而精细的
	  控制底层通信行为。比如可以通过 setsockopt函数来设置 ip 数据报在网络上的存活时间。
	    值得一提的是,socket是一套通用网络编程接口,它不但可以访问内核中tcp/ip协议,而且可以访问其他网络协议栈(比如unix本地域协议栈等)。

 

1.1.4 应用层

 

 

1.2 封装

 

 

 

1.3 分用

 

1.5 ARP 协议工作原理

 

1.6 DNS 工作原理

 

1.7 socket 与 TCP/IP 协议族的关系

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值