Linux网络编程(二)

目录

前言

实体(entity)表示任何可发送或接受信息的硬件或软件进程。
协议是控制两个对等实体进行通信的规则的集合。在协议的控制下,两个对等实体间的通信使得本层能够向上一层提供服务。要实现本层协议,还需要使用下层所提供的服务。本层的服务用户只能看见服务而无法看见下面的协议。下面的协议对上面的服务用户是透明的。协议是”水平的“,即协议是控制对等实体之间通信的规则。
服务是”垂直的“,即服务是由下层向上层通过层间接口提供的。
同一系统相邻两层的实体进行交互的地方,称为服务访问点SAP(Service Access Point)。

链路层的一些概念

链路是一条无源的点到点的物理线路段,中间没有任何其他的交换结点。数据链路除了物理线路外,还必须与通信协议来控制这些数据的传输。若把实现这些协议的硬件和软件加到链路上,就构成了数据链路。
常常在两个对等的数据链路层之间画出一个数字管道,而在这条管道上传输的数据单位是

  • 封装成帧
    封装成帧就是在一段数据的前后分别添加首部和尾部,然后就构成了一个帧。
    首部和尾部的一个重要作用就是进行帧定界

MTU

以太网对数据帧的长度都有限制,其最大值是1500,将这个限制称作最大传输单元(MTU, Maximum Transmission Unit)
如果IP层有一个数据报要传,而且数据的长度比链路层的MTU还大,那么IP层就要进行分片(Fragmentation),把数据报分成若干片,这样每一片都小于MTU
当网络上的两台主机互相进行通信时,两台主机之间要经过多个网络,每个网络的链路层可能有不同的MTU,其中两台通信主机路径中的最小MTU被称作路径MTU

以太网帧格式

Linux网络编程(二)
类型字段用来标志上一层使用的是什么协议,以便把收到的MAC帧的数据上交给上一层的这个协议。
数据字段正式名称是MAC客户数据字段,最小长度64字节-18字节的首部和尾部=数据字段的最小长度

网络层的一些概念

与IP协议配套使用的协议

网际协议IPTCP/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的例子,它没有通过运输层的TCPUDP

  • 网际组管理协议IGMP(Internet Group Management Protocol)
    目的是为了使路由器知道多播组成员的信息。

Linux网络编程(二)

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类地址是多播地址
Linux网络编程(二)

  • 为什么要分为网络号和主机号?
    因为这样路由器可以仅根据目的主机所连接的网络号来转发分组(而不考虑目的主机号),这样就可以使路由表中的项目数大幅度减少,从而减小了路由表所占的存储空间。

实际上IP地址是标志一个主机(或路由器)和一条链路的接口。
当一个主机同时连接到两个网络上,该主机就必须同时具有两个相应的IP地址,其网络号必须是不同的。这种主机称为多归属主机
由于一个路由器至少应当连接到两个网络(这样它才能将IP数据报从一个网络转发到另一个网络),因此一个路由器至少应当有两个不同的IP地址。
用转发器或网桥连接起来的若干个局域网仍为一个网络,因此这些局域网都具有同样的网络号 net-id

IP数据报格式

一个IP数据报由首部和数据两部分组成。首部的前一部分是固定长度,共20字节,是所有IP数据报必须具有的。在首部的固定部分后面是一些可选字段,其长度是可变的。
Linux网络编程(二)

路由表

在路由表中,对每一条路由,最主要的是(目的网络地址,下一跳地址)
- 查找路由表
根据目的网络地址就能确定下一条路由器,这样做的结果是:
IP数据报最终一定可以找到目的主机所在目的网络上的路由器(可能要通过多次的间接交付)
只有到达最后一个路由器时,才试图向目的主机进行直接交付。
- 默认路由
只要不是路由表中的路由,就选择默认路由。

传输层的一些概念

传输层向上层应用层提供通信服务,它属于面向通信部分的最高层,同时也是用户功能中的最底层。
传输层为应用进程之间提供端到端的逻辑通信(但网络层是为主机之间提供逻辑通信)。
传输层有两种不同的运输协议,即面向连接的TCP和无连接的UDP

传输控制协议TCP

TCP全称:Transmission Control ProtocolTCP提供面向连接的服务。TCP不提供广播或多播服务。由于TCP要提供可靠的、面向连接的运输服务,因此不可避免地增加了许多的开销。这不仅使协议数据单元的首部增大很多,还要占用许多的处理机资源。

  • TCP特点
    1. 面向连接
    2. 点对点
    3. 可靠交付
    4. 全双工
    5. 面向字节流

TCP的连接

TCP把连接作为最基本的抽象。
每一条TCP连接有两个端点。TCP连接的端点不是主机,不是主机的IP地址,不是应用进程,也不是运输层的协议端口。TCP连接的端点叫做套接字。
端口号拼接到IP地址即构成套接字。

TCP报文格式

Linux网络编程(二)

三次握手

TCP连接建立都是采用客户服务器方式。主动发起连接建立的应用进程叫做客户(client),被动等待连接的应用进程叫做服务器(server)。
Linux网络编程(二)

连接终止四次握手

A对于B的连接终止需要两次握手,B对于A的连接终止需要两次握手。
Linux网络编程(二)

TCP可靠性

不可靠:传输有差错(校验和)、失序(序号)、重复(序号)、丢包(超时重传+确认)。

  1. 应用数据被分割成TCP认为最合适发送的数据块,称为段传递给IP层。
  2. TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。
  3. TCP收到发自TCP连接另一端的数据,它将发送一个确认。这个确认不是立即发送,通常将推迟几分之一秒。
  4. TCP将保持它首部和数据的校验和。这是一个端到端的校验和,目的是检测数据在传输过程中的任何变化。如果收到段的校验和有差错,TCP将丢弃这个报文段并且不确认(导致对方超时重传)。
  5. TCP承载与IP数据报来传输,而IP数据报的到达可能会失序,因此TCP报文段的到达也可能会失序。TCP将对收到的数据进行重新排序。
  6. IP数据报会发生重复,TCP的接收端必须丢弃重复的数据。
  7. TCP还能提供流量控制。TCP连接的每一方都有一定大小的缓冲空间。

滑动窗口协议

一般来说,我们总是希望数据传输的更快一些。但如果发送方把数据发送的过快,接收方就可能来不及接收,这就会造成数据的丢失。流量控制就是让发送方的发送速率不要太快,既要让接收方来得及接收,也不要使网络发生拥塞。

用户数据报协议UDP

UDP全称:User Datagram Protocol

UDP的主要特点

  1. 无连接,即发送数据之前不需要建立连接。
  2. 不可靠,UDP使用尽最大努力交付,即不保证可靠交付,同时也不使用拥塞控制。
  3. 面向报文,UDP没有拥塞控制,很适合多媒体通信的要求。
  4. 支持一对一、一对多、多对一和多对多的交互通信。
  5. UDP的首部开销小,只有8个字节。
    Linux网络编程(二)

总结

只是对计算机网络中的一些概念进行简单的理解,后面用到了再补充,感觉学习来说,必须要结合实际,否则理论就失去了意义。这也是在大学的时候,没有学好计算机网络的原因!

链接地址

计算机网络PPT韩立刚老师