Linux网络编程(二)
目录
前言
实体(entity
)表示任何可发送或接受信息的硬件或软件进程。
协议是控制两个对等实体进行通信的规则的集合。在协议的控制下,两个对等实体间的通信使得本层能够向上一层提供服务。要实现本层协议,还需要使用下层所提供的服务。本层的服务用户只能看见服务而无法看见下面的协议。下面的协议对上面的服务用户是透明的。协议是”水平的“,即协议是控制对等实体之间通信的规则。
服务是”垂直的“,即服务是由下层向上层通过层间接口提供的。
同一系统相邻两层的实体进行交互的地方,称为服务访问点SAP
(Service Access Point
)。
链路层的一些概念
链路是一条无源的点到点的物理线路段,中间没有任何其他的交换结点。数据链路除了物理线路外,还必须与通信协议来控制这些数据的传输。若把实现这些协议的硬件和软件加到链路上,就构成了数据链路。
常常在两个对等的数据链路层之间画出一个数字管道,而在这条管道上传输的数据单位是帧
- 封装成帧
封装成帧就是在一段数据的前后分别添加首部和尾部,然后就构成了一个帧。
首部和尾部的一个重要作用就是进行帧定界。
MTU
以太网对数据帧的长度都有限制,其最大值是1500,将这个限制称作最大传输单元(MTU
, Maximum Transmission Unit
)
如果IP
层有一个数据报要传,而且数据的长度比链路层的MTU
还大,那么IP
层就要进行分片(Fragmentation
),把数据报分成若干片,这样每一片都小于MTU
。
当网络上的两台主机互相进行通信时,两台主机之间要经过多个网络,每个网络的链路层可能有不同的MTU
,其中两台通信主机路径中的最小MTU
被称作路径MTU。
以太网帧格式
类型字段用来标志上一层使用的是什么协议,以便把收到的MAC
帧的数据上交给上一层的这个协议。 数据字段
正式名称是MAC
客户数据字段,最小长度64字节-18字节的首部和尾部=数据字段的最小长度
网络层的一些概念
与IP协议配套使用的协议
网际协议IP
是TCP/IP
体系中两个最主要的协议之一。与IP
协议配套使用的还有四个协议:
- 地址解析协议
ARP
(Address Resolution Protocol
)
根据IP
地址得到MAC
地址 - 逆地址解析协议
RARP
(Reverse Address Resolution Protocol
)
根据MAC
地址得到IP
地址 网际控制报文协议
ICMP
(Internet Control Message Protocol
)
为了提供IP
数据报交付成功的机会,在网际层使用了网际控制报文协议(Internet Control Message Protocol
).ICMP
允许主机或路由器报告差错情况和提供有关异常情况的报告。ICMP
不是高层协议,而是IP
层协议ICMP
报文作为IP
层数据报的数据,加上数据报的首部,组成IP
数据报发送出去。ICMP
报文的种类有两种:即ICMP
差错报文和ICMP
询问报文。ICMP
的应用最常见的就是ping
命令,测试两个主机之间的连通性,ping使用了ICMP
回送请求与回送回答报文。ping
是应用层直接使用网络层ICMP
的例子,它没有通过运输层的TCP
或UDP
。网际组管理协议
IGMP
(Internet Group Management Protocol
)
目的是为了使路由器知道多播组成员的信息。
IP协议
分类IP地址
每一类地址都由两个固定长度的字段组成,其中一个字段是网络号,它标志主机(或路由器)所连接到的网络,而另一个字段则是主机号,它标志该主机(或路由器)。
A类地址:0.0.0.0-127.255.255.255 网络号1个字节
B类地址:128.0.0.0-191.255.255.255 网络号2个字节
C类地址:192.0.0.0-223.255.255.255 网络号3个字节
D类地址:224.0.0.0-239.255.255.255 D类地址是多播地址
- 为什么要分为网络号和主机号?
因为这样路由器可以仅根据目的主机所连接的网络号来转发分组(而不考虑目的主机号),这样就可以使路由表中的项目数大幅度减少,从而减小了路由表所占的存储空间。
实际上IP地址是标志一个主机(或路由器)和一条链路的接口。
当一个主机同时连接到两个网络上,该主机就必须同时具有两个相应的IP
地址,其网络号必须是不同的。这种主机称为多归属主机
。
由于一个路由器至少应当连接到两个网络(这样它才能将IP
数据报从一个网络转发到另一个网络),因此一个路由器至少应当有两个不同的IP
地址。
用转发器或网桥连接起来的若干个局域网仍为一个网络,因此这些局域网都具有同样的网络号 net-id
IP数据报格式
一个IP数据报由首部和数据两部分组成。首部的前一部分是固定长度,共20字节,是所有IP数据报必须具有的。在首部的固定部分后面是一些可选字段,其长度是可变的。
路由表
在路由表中,对每一条路由,最主要的是(目的网络地址,下一跳地址)
- 查找路由表
根据目的网络地址就能确定下一条路由器,这样做的结果是:
IP数据报最终一定可以找到目的主机所在目的网络上的路由器(可能要通过多次的间接交付)
只有到达最后一个路由器时,才试图向目的主机进行直接交付。
- 默认路由
只要不是路由表中的路由,就选择默认路由。
传输层的一些概念
传输层向上层应用层提供通信服务,它属于面向通信部分的最高层,同时也是用户功能中的最底层。
传输层为应用进程之间提供端到端的逻辑通信(但网络层是为主机之间提供逻辑通信)。
传输层有两种不同的运输协议,即面向连接的TCP
和无连接的UDP
。
传输控制协议TCP
TCP
全称:Transmission Control Protocol
。TCP
提供面向连接的服务。TCP
不提供广播或多播服务。由于TCP
要提供可靠的、面向连接的运输服务,因此不可避免地增加了许多的开销。这不仅使协议数据单元的首部增大很多,还要占用许多的处理机资源。
-
TCP
特点- 面向连接
- 点对点
- 可靠交付
- 全双工
- 面向字节流
TCP
的连接
TCP
把连接作为最基本的抽象。
每一条TCP
连接有两个端点。TCP
连接的端点不是主机,不是主机的IP
地址,不是应用进程,也不是运输层的协议端口。TCP
连接的端点叫做套接字。
端口号拼接到IP
地址即构成套接字。
TCP
报文格式
三次握手
TCP
连接建立都是采用客户服务器方式。主动发起连接建立的应用进程叫做客户(client
),被动等待连接的应用进程叫做服务器(server
)。
连接终止四次握手
A对于B的连接终止需要两次握手,B对于A的连接终止需要两次握手。
TCP可靠性
不可靠:传输有差错(校验和)、失序(序号)、重复(序号)、丢包(超时重传+确认)。
- 应用数据被分割成
TCP
认为最合适发送的数据块,称为段传递给IP
层。 - 当
TCP
发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。 - 当
TCP
收到发自TCP
连接另一端的数据,它将发送一个确认。这个确认不是立即发送,通常将推迟几分之一秒。 -
TCP
将保持它首部和数据的校验和。这是一个端到端的校验和,目的是检测数据在传输过程中的任何变化。如果收到段的校验和有差错,TCP
将丢弃这个报文段并且不确认(导致对方超时重传)。 -
TCP
承载与IP
数据报来传输,而IP
数据报的到达可能会失序,因此TCP
报文段的到达也可能会失序。TCP
将对收到的数据进行重新排序。 -
IP
数据报会发生重复,TCP
的接收端必须丢弃重复的数据。 -
TCP
还能提供流量控制。TCP
连接的每一方都有一定大小的缓冲空间。
滑动窗口协议
一般来说,我们总是希望数据传输的更快一些。但如果发送方把数据发送的过快,接收方就可能来不及接收,这就会造成数据的丢失。流量控制就是让发送方的发送速率不要太快,既要让接收方来得及接收,也不要使网络发生拥塞。
用户数据报协议UDP
UDP
全称:User Datagram Protocol
UDP的主要特点
- 无连接,即发送数据之前不需要建立连接。
- 不可靠,UDP使用尽最大努力交付,即不保证可靠交付,同时也不使用拥塞控制。
- 面向报文,UDP没有拥塞控制,很适合多媒体通信的要求。
- 支持一对一、一对多、多对一和多对多的交互通信。
- UDP的首部开销小,只有8个字节。
总结
只是对计算机网络中的一些概念进行简单的理解,后面用到了再补充,感觉学习来说,必须要结合实际,否则理论就失去了意义。这也是在大学的时候,没有学好计算机网络的原因!