计算机网络

本文最后更新于:2024年3月7日 下午

写在前面

计算机网络的各层集齐协议的集合就是计算机网络的体系结构。计算机网络的体系结构就是这个计算机网络及其构件所应完成的功能的精确定义。
标准的体系结构为OSI的七层协议。OSI体系理论完整但是较为复杂。主流使用的是TCP/IP体系结构。
关于OSI于TCP/IP体系的对比
实质上来讲TCP/IP体系的体系结构主要是在网络层,运输层,应用层。再往下的数据链路层以及物理层没什么具体的内容(就是硬件从业人员要搞的了,不对,我好像就是硬件人员. . .)

TCP/IP体系结构


按照从底往上的顺序讲解

网络接口层

物理层

数据链路层

可靠传输

网络中的可靠传输一般分为三种方法。

停止-等待协议(SW)

发送端发送数据,之后进入等待区间,在等待区间内若是收到接收端返回的确认报表则继续发下一帧数据。若是等待区间结束仍未接收到返回的确认报表则重新发送数据,知道收到确认报表为止。接收端若是收到数据就会发送确认报表,若是发现下一次发来的数据仍是上次的数据则可认定是确认报表丢失或未在等待时间内到达发送端,则会继续发送确认报表直到发来新的数据。
简单,十分可靠,保证了不丢包,但是信道利用率较低,延时较长。

后退n帧协议(GBN)

对帧进行编号,一次性发送多个帧(W),若是收到接收端发送的收到确认,滑动发送窗口。接收端接收时接受多个帧后发送一次确认报表,若是收到错误帧则丢弃,并发送重复之前的确认报表。发送端收到重复的确认报表就会发起重传,由具体实现而定。
相比于停止-等待协议,信道利用率大大增加。发送方在收到确认之前会发送多个数据帧。
不过,当通信线路质量不好的时候回退N帧协议并不比停止等待协议的信道利用率高。

学习来源于这里

选择重传协议(SR)
以太网协议

网络层

ARP/RARP协议

IP协议

IP协议是TCP/IP协议栈中最核心的协议之一,通过IP地址,保证了联网设备的唯一性,实现了网络通信的面向无连接和不可靠的传输功能。它提供了无连接的数据传输服务,主要功能有路由选择、寻址、分段以及组装。上层的数据报文在传输层分成了若干个数据包,每一个数据包首先在源头的网关上进行路由匹配,然后一跳跳地穿越若干个设备(每个传输节点都需经历物理层,数据链路层,网络层三层),最终送到目标主机。数据包在传输的过程中,由于物理层最大传输单元长度的要求会被切割成若干小段,每一个小段都包含有完整的IP报文头部,但其中只有第一个小段包含了TCP头部。在穿越包过滤防火墙时,由于后续小段不包含TCP头部,将无法通过检测,在穿越状态检测防火墙时,则可以被检测通过。
IP协议接收来自更底层发来的数据包,然后把数据包传递给更高的一层TCP层(传输层)。同样,IP层也会接收来自TCP层的数据包,并传递给更底层。由于IP协议是无连接的,无法确认数据是否有丢失或破损。

IP协议只能指明数据包的源通信方,但无法保证数据一定能传输到目标地址

IP头

由于历史因素,目前IPv4仍有相当数量的网络在使用,因此于此将IPv4及IPv6的IP头均记下。
IPv4数据报

(1) 版本号:IP协议的版本。对于IPv4来说值是4
(2) 头部长度(IHL):4位最大为0xF,注意该字段表示单位是字(4字节)
(3) 服务类型(Type Of Service):该字段指定路由器在传送过程中如何处理数据报文,也即表示这个数据报文在由IPv4 网络中的路由器转发时所期待的服务。这个字段长度为8位。这个字段也可以解释为区分业务编码点(Differentiated Services Codepoints, DSCP)。RFC2474 提供了关于 DSCP 的详细定义。
(4) 总长度: 指整个IP数据报的长度,单位为字节,即IP数据报的最大长度为65535字节(长度为16)。由于MTU的限制,长度超过MTU的数据报都将被分片传输,所以实际传输的IP分片数据报的长度远没有达到最大值
(5)(6)(7)3个字段则描述如何实现分片:
(5) 标识:唯一地标识主机发送的每一个数据报,其初始值是随机的,每发送一个数据报其值就加1。同一个数据报的所有分片都具有相同的标识值
(6)标志: 位1保留,位2表禁止分片,若设置了此位IP模块将不对数据报进行分片,在此情况下若IP数据报超过MTU,IP模块将丢弃数据报并返回一个ICMP差错报文;位3标识更多分片(MF),除了数据报的最后一个分片,其他分片都要把它设置为1
(7) 位偏移:分片相对原始IP数据报数据部分的偏移。实际的偏移值为该值左移3位后得到的,所以除了最后一个IP数据报分片外,每个IP分片的数据部分的长度都必须是8的整数倍
(8) 生存时间:数据报到达目的地之前允许经过的路由器跳数。TTL值被发送端设置,常设置为64。数据报在转发过程中每经过一个路由该值就被路由器减1.当TTL值为0时,路由器就将该数据包丢弃,并向源端发送一个ICMP差错报文。TTL可以防止数据报陷入路由循环
(9) 协议: 区分IP协议上的上层协议。在Linux系统的/etc/protocols文件中定义了所有上层协议对应的协议字段,ICMP为1,TCP为6,UDP为17
(10) 头部校验和: 由发送端填充接收端对其使用CRC算法校验,检查IP数据报头部在传输过程中是否损坏
(11) 源IP地址和目的IP地址: 表示数据报的发送端和接收端。一般情况下这两个地址在整个数据报传递过程中保持不变,不论中间经过多少个路由器
(12) 选项:可变长的可选信息,最多包含40字节。选项字段很少被使用。可用的IP可选项有:
  a. 记录路由: 记录数据包途径的所有路由的IP,这样可以追踪数据包的传递路径
  b. 时间戳: 记录每个路由器数据报被转发的时间或者时间与IP地址对,这样就可以测量途径路由之间数据报的传输的时间
  c. 松散路由选择: 指定路由器的IP地址列表数据发送过程中必须经过所有的路由器
  d. 严格路由选择: 数据包只能经过被指定的IP地址列表的路由器
  e. 上层协议(如TCP/UDP)的头部信息

IPv6数据报

版本:版本字段用来表示IP数据报使用的是IPv6协议封装,占4位,对应值为6(0110)。
通信分类(Traffic Class):通信分类字段用来标识对应IPv6的通信流类别,或者说是优先级别,占8位,类似于IPv4中的ToS(服务类型)字段。
流标签(Flow Label):流标签字段时IPv6数据报中新增的一个字段,占20位,可用来标记报文的数据流类型,以便在网络层区分不同的报文。流标签字段有源节点分配,通过流标签、源地址、目的地址三元组方式就可以唯一标识一条通信流,而不用像IPv4那样需要使用五元组方式(源地址、目的地址、源端口、目的端口和传输层协议号)。这样发动的最大好处有两点:一是流标签可以和任意的关联,需要标识不同类型的流(可以是非五元组)时,无需对流标签做改动;二是流标签在IPv6基本头中,使用IPSec时此域对转发路由器可见,因此转发路由器可以在使用IPv6报文IPSec的情况下仍然可以通过三元组(流标签、源地址、目的地址)针对特定的流进行QoS(质量服务)处理。
有效载荷长度(PayLoad Length):有效载荷长度字段是以字节为单位的标识IPv6数据报中有效载荷部分(包括所有扩展报头部分)的总长度,也就是除了IPv6的基本报头以外的其他部分的总长度,占20位。
下一个头部(Next Header):下一个头部字段用来标识当前报头(或者扩展报头)的下一个头部类型,占8位。每种扩展报头都有其对应的值。下一个头部字段内定义的扩展报头类型与IPv4中的协议字段值类似,但在IPv6数据报中,紧接着IPv6报头的可能不是上层协议头部(当没有扩展报头或者为最后一个扩展报头时才是上层协议头),而是IPv6扩展报头。这一机制下处理扩展报头更搞笑,因为标识了数据报中对应的上层协议或者扩展报头类型,转发路由器只需处理必须处理的扩展报头,提高了转发效率。
跳数限制(Hop Limit):跳数限制于IPv4报文中的TTL字段类似,指定了报文可以有效转发的次数,占8位。报文每经过一个路由器结点,跳数值就减1,当此字段值减到0时,则直接丢弃该报文。
源地址(Source IP Address):源IP地址字段标识了发送该IPv6报文源节点的IPv6地址,占128位。
目的IP地址(Destination IP Address):目的IP地址字段标识了IPv6报文的接受节点的IPv6地址,占128位。

IPv6扩展报头:在各字段介绍中我们讲到了,IPv6报文中可以携带可选的IPv6扩展报头。IPv6扩展报头是跟在IPv6基本报头后面的可选报头。由于在IPv4的报头中包含了几乎所有的可选项,因此每个中间路由器都必须检查这些选项是否存在。在IPv6中,这些相关选项被统一移到了扩展报头中,这样中间路由器不必处理每一个可能出现的选项(仅有“逐跳选项”报头是必须要处理的),提高了处理器处理数据报文的速度,也提高了其转发的性能。
IPv6扩展报头附加在IPv6报头目的IP地址字段后面,可以有0个,或者多个扩展报头。主要的IPv6扩展报头有一下几类:

逐跳选项头(Hop-by-hop Options Header):本扩展报头类型值为0(在IPv6报头下一个头部字段中定义,下同)。此扩展报头须被转发路径所有节点处理。目前在路由告警(RSVP和MLDv1)与Jumbo帧处理中使用了逐跳选项头,因为路由告警需要通知到转发路径中所有结点,而Jumbo帧是长度超过65535字节的报文,传输这种报文需要转发路径中所有结点都能正常处理。
目的选项头(Destination Options Header):本扩展报头类型值为60。只可能出现在两个位置:

  1. 路由头前,这是此选项头被目的节点和路由头中指定的结点处理;
  2. 上层头前(任何的ESP头后),此时只能被目的结点处理。

移动IPv6中使用了目的选项头,称为家乡地址选项。家乡地址选项由目的选项头携带,用以移动结点离开“家乡”后通知接受节点此移动结点对应的家乡地址。接受节点收到带有家乡地址选项的报文后,会把家乡地址选项中的源地址(移动节点的家乡地址)和报文中源地址(移动节点的转交地址)交换,这样上层协议始终认为是在和移动节点的家乡地址通信,实现了移动漫游功能。
路由头(Routing Header):本扩展报头类型值为43,用于源路由选项和移动IPv6
分段头:本扩展报头类型值为44,用于标识数据报的分段,在IPv4中就有对应的字段。当源节点发送的报文超过传输链路MTU(源节点和目的节点之间传输路径的MTU)时,需要对报文进行分段时使用。
认证头:本扩展报头类型值为51,用于IPSec,提供报文验证,完整性检查。
封装安全有效载荷头:本扩展头类型值为50,用于IPSec,提供报文验证、完整性检查差和加密。
上层头:这是用来标识数据报中上层协议类型,如TCP、UDP、ICMP等。


运输层

TCP协议

传输控制协议TCP,提供了面向连接的,可靠的数据传输服务。
面向连接是指程序在使用TCP协议之前必须先建立TCP链接,在传输完数据后要释放连接。
TCP链接只能有两个端点,因此每一条TCP的链接为点对点的。
TCP协议提供全双工通信,允许通信的双方在任何时候都能发送数据。TCP链接的两端都设置有发送和接收缓存。可供应用程序随时取用。
TCP是面向字节流的,上层应用程序传给它的所有数据仅作为无结构的字节流,并不知道传送数据实际的含义。传输是会将字节流分为数据块传输,发送端输出的数据块和接收端向上层应用发送的数据块可以不一样,但是要保证上层应用向发送端输出的字节流和接收端向上层应用发送的字节流完全一样。
TCP传输数据的组成

各个段位说明
源端口和目的端口:各占2字节.端口是传输层与应用层的服务接口.传输层的复用和分用功能都要通过端口才能实现
序号:占 4 字节.TCP 连接中传送的数据流中的每一个字节都编上一个序号.序号字段的值则指的是本报文段所发送的数据的第一个字节的序号
确认号:占 4 字节,是期望收到对方的下一个报文段的数据的第一个字节的序号
数据偏移/首部长度:  占 4 位,它指出 TCP 报文段的数据起始处距离 TCP 报文段的起始处有多远.“数据偏移”的单位是 32 位字(以 4 字节为计算单位)
保留:  占 6 位,保留为今后使用,但目前应置为 0
紧急URG:  当 URG=1 时,表明紧急指针字段有效.它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据)
确认ACK:  只有当 ACK=1 时确认号字段才有效.当 ACK=0 时,确认号无效
PSH(PuSH):  接收 TCP 收到 PSH = 1 的报文段,就尽快地交付接收应用进程,而不再等到整个缓存都填满了后再向上交付
RST (ReSeT):  当 RST=1 时,表明 TCP 连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接
同步 SYN:  同步 SYN = 1 表示这是一个连接请求或连接接受报文
终止 FIN:  用来释放一个连接.FIN=1 表明此报文段的发送端的数据已发送完毕,并要求释放运输连接
检验和:  占 2 字节.检验和字段检验的范围包括首部和数据这两部分.在计算检验和时,要在 TCP 报文段的前面加上 12 字节的伪首部
紧急指针:  占 16 位,指出在本报文段中紧急数据共有多少个字节(紧急数据放在本报文段数据的最前面)
选项:  长度可变.TCP 最初只规定了一种选项,即最大报文段长度 MSS.MSS 告诉对方 TCP:“我的缓存所能接收的报文段的数据字段的最大长度是 MSS 个字节.” [MSS(Maximum Segment Size)是 TCP 报文段中的数据字段的最大长度.数据字段加上 TCP 首部才等于整个的 TCP 报文段]
填充:  这是为了使整个首部长度是 4 字节的整数倍

窗口扩大:  占 3 字节,其中有一个字节表示移位值 S.新的窗口值等于TCP 首部中的窗口位数增大到(16 + S),相当于把窗口值向左移动 S 位后获得实际的窗口大小
时间戳:  占10 字节,其中最主要的字段时间戳值字段(4字节)和时间戳回送回答字段(4字节)
选择确认:  接收方收到了和前面的字节流不连续的两2字节.如果这些字节的序号都在接收窗口之内,那么接收方就先收下这些数据,但要把这些信息准确地告诉发送方,使发送方不要再重复发送这些已收到的数据

三次握手

TCP建立连接的过程通常被称为三次握手,因为主要步骤有三步。

第一次握手:请求端通过向服务器发送一个含有同步序列号的标志位的数据段请求建立连接,通过这个数据段,服务器可以了解到是请求端想要和你通信;以及可以用哪个序列号作为起始数据段来回应请求端。

第二次握手:服务器收到请求端的请求后,用一个带有确认应答(ACK)和同步序列号(SYN)标志位的数据段响应请求端,请求端收到数据段后就可以知道服务器已经收到请求,可以传输数据;以及需要使用那个序列号作为起始数据段来回应服务器。

第三次握手:请求端收到这个数据段后,再发送一个确认应答,确认已收到服务器的数据段,表明已收到回复,要开始传输实际数据了,这样3次握手就完成了,请求端和服务器就可以传输数据了。

传输过程

如何处理丢包问题
发送端会首先将数据送到发送缓冲中,
TCP协议发送端发送时会在数据头中加入序列号以及本次发送数据的长度。接收端接收到后会返回ACK=序列号+长度 即下一段数据的起始位置。这样发送端就可以知道接收端已经接收到的位置,接收端也可以重构数据。若有丢包问题,则接收端不会返回新的起始位置,会要求发送端重传,达到不丢包的效果。
注意“TCP 标准没有规定对不按序到达的数据应如何处理.通常是先临时存放在接收窗口中,等到字节流中所缺少的字节收到后,再按序交付上层的应用进程

断开连接

断开连接有四个步骤

第一次: 当请求端完成数据传输后,将控制位FIN置1,提出停止TCP连接的请求 ;

第二次: 服务器收到FIN后对其作出响应,确认来自该请求端上的TCP连接将关闭,将ACK置1;

第三次: 由服务器端再提出反方向的关闭请求,将FIN置1 ;

第四次: 请求端对服务器的请求进行确认,将ACK置1,双方向的关闭结束。

UDP协议

端口

应用层

HTTP协议

超文本传输协议,将超文本标记语言(HTML)从服务器传输到客户端的协议。它是通过TCP或通过TLS加密的 TCP 连接发送的应用层协议。

特点
简单易懂:传输的报表消息可以被测试人员直接理解运用,使测试更加简单。
传输效率高:
HTTP 是无状态的:在同一连接上连续执行的两个请求之间没有链接。对于试图连贯地与某些页面交互的用户来说,这会立即成为问题,例如,使用电子商务购物篮。但是,虽然 HTTP 本身的核心是无状态的,但 HTTP cookie 允许使用有状态会话。使用标头可扩展性,HTTP Cookie 被添加到工作流中,允许在每个 HTTP 请求上创建会话以共享相同的上下文或相同的状态。
可靠性高:
兼容性好:
灵活度高:HTTP是可拓展的,允许传输任意类型的数据对象

建立链接步骤
  1. 打开TCP链接:TCP 连接用于发送一个或多个请求,并接收一个应答。客户端可以打开一个新的连接,重用一个现有的连接,或者打开几个到服务器的 TCP 连接。
  2. 发送 HTTP 消息:HTTP 消息(在 HTTP/2 之前)是人类可读的。在 HTTP/2 中,这些简单的消息被封装在帧中,无法直接读取,但原理是一样的。
  3. 服务器接受请求并返回HTTP响应:Web服务器解析请求,定位请求资源。服务器将资源复本写到TCP连接里,由客户端读取。一个响应由状态行、响应头部、空行和响应数据4部分组成。
  4. 释放连接TCP连接
  5. 客户端解析返回的数据:浏览器解析HTML内容,根据HTML的语法对其进行格式化,并在浏览器窗口中显示。

    专有名词

    集线器

    集线器(hub)属于纯硬件网络底层设备,基本上不具有类似于交换机的”智能记忆”能力和”学习”能力。它也不具备交换机所具有的MAC地址表,所以它发送数据时都是没有针对性的,而是采用广播方式发送。也就是说当它要向某节点发送数据时,不是直接把数据发送到目的节点,而是把数据包发送到与集线器相连的所有节点,因此在同一时间若是有两条线路在发送数据则会造成信息碰撞,用集线器链接的各设备处于同一冲突域内。

    交换机

    相当于集线器的升级版,集线器只能进行两个端口之间的链接。交换机拥有高密度的接口并且有着mac表,每个端口都具有桥接功能,可以连接一个局域网或一台高性能服务器或工作站。实际上,交换机有时被称为多端口网桥。交换机允许许多组端口间的通道同时工作。所以,交换机的功能体现出不仅仅是一个网桥的功能,而是多个网桥功能的集合。

    网关

    路由器

    路由器(Router)是连接两个或多个网络的硬件设备,在网络间起网关的作用,是读取每一个数据包中的地址然后决定如何传送的专用智能性的网络设备。它能够理解不同的协议,例如某个局域网使用的以太网协议,因特网使用的TCP/IP协议。这样,路由器可以分析各种不同类型网络传来的数据包的目的地址,把非TCP/IP网络的地址转换成TCP/IP地址,或者反之;再根据选定的路由算法把各数据包按最佳路线传送到指定位置。所以路由器可以把非TCP/IP网络连接到因特网上。路由器具有防火墙的功能,因为其不传送不支持路由协议的数据,可防止广播风暴,而交换机没有这个功能。

关于猫

猫的学名叫调制解调器,它的作用是将数字信号(电脑想要发送的信息)转换成模拟信号(网线中的电流脉冲)从而使信息在网线中传输。 由于计算机的一切信号都要由电流脉冲传送出去,因而猫是必须的。目前的家用路由器一般都是路由猫,即路由器兼顾了猫和简单交换机的功能

子网掩码

DNS

人们通过例如 google.com 等域名在线访问信息。Web 浏览器通过IP地址进行交互。DNS将域名转换为IP地址,以便浏览器能够加载互联网资源。连接到 Internet 的每个设备都有一个唯一 IP 地址,其他计算机可使用该 IP 地址查找此设备。DNS 服务器使人们无需存储一个32位的和人类理解范畴中与目标网站毫无关联的数,便利了用户使用。

DNS系统是一个树的结构,所有的请求都会先发送到根服务器中,DNS的根服务器有十三组,每一组又有数量不一的多台服务器,散布在世界各地。用户在访问一个根服务器所对应的ip时,会优先选择对应该ip的根服务器的物理距离最近的一台。
用户个人机上也存在有一定的DNS缓存,存放了最近使用DNS系统进行的查询的相关数据,本地储存最大的优势在于极其优秀且稳定的速度。减少了延迟。


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!