计算机网络一文全览

前言

在做上层应用开发的时候,我们往往可以调用各种网络框架来实现网络请求、数据下发的功能。网络框架诚然可以简化代码的结构或减少不必要的代码量,但这也容易导致我们对底层的网络原理变得陌生。而熟悉计算机网络原理是每一位程序员通往高级乃至资深工程师的必经之路,本文即是对计算机网络做一次深入的分析总结。

OSI七层模型是较权威标准的模型,但因为分层复杂、不太实用,因此使用较少。TCP/IP四层模型是应用较广泛的模型。而为了更好地掌握网络分层这块知识,一般会将这两种协议综合起来,形成五层协议进行学习。

网络模型各层作用及各层协议传输单元

OSI七层模型:

  • 应用层:通过应用进程间的交互实现网络应用,协议传输单元是应用协议数据单元(APDU,Application Protocol Data Unit)。
  • 表示层:数据格式转换,协议传输单元是表示协议数据单元(PPDU,Presentation Protocol Data Unit)。
  • 会话层:实现数据同步过程中的会话管理,协议传输单元是会话协议数据单元(SPDU,Session Protocol Data Unit)。
  • 运输层:实现端口与端口之间的数据传输,协议传输单元是报文段(Segment)。
  • 网络层:实现主机与主机之间的通信,协议传输单元是数据包(Package)。
  • 数据链路层:将网络层下发的数据包打包成帧,实现在链路相邻节点间的传输,协议传输单元是帧(Frame)。
  • 物理层:在物理连接上传送比特流,协议传输单元是比特(Bit)。

TCP/IP四层模型:

  • 应用层
  • 运输层
  • 网际层
  • 网络接口层

五层模型:

  • 应用层
  • 运输层
  • 网络层
  • 数据链路层
  • 物理层

不同分层的主要协议

  • 应用层

在这里插入图片描述

  • 运输层
    在这里插入图片描述

  • 网络层
    在这里插入图片描述

  • 数据链路层
    PPP协议(点到点协议,为在同等单元之间传输数据包设计的协议)
    MAC协议(介质访问控制协议)
    VLAN协议(虚拟局域网协议)

  • 物理层
    RJ45(一种接口协议)
    IEEE802.2(协议定义传输速率、工作频段等)

重要协议的介绍

HTTPS和HTTP协议是计算机网络中十分重要的协议,上篇文章深入分析HTTP、HTTPS协议对它们已经有详细介绍。

DNS是怎么通过域名找到对应IP地址?

  • 查看本地hosts文件是否存在域名对应的IP,有就直接返回。(文件缓存)
  • 查看本地DNS缓存,有就返回。(本地系统缓存)
  • 连接网络,查询DNS服务器缓存。(第一次访问某域名,肯定没有本地缓存,一定会走到dns服务器这一步)
  • DNS服务器递归查找。

递归查找的详细过程:

  • 询问根域名(.com.最后的一个点),获取顶级域名( .com )
  • 询问顶级域名,获取二级域名(.baidu.com)
  • 询问二级域名,获取三级域名 (.baijiahao.baidu.com)
  • 最后,将.baijiahao.baidu.com的ip地址返回给用户,并且缓存 。

ARP执行过程

  • 每台主机都有一个ARP列表,列表中存储IP地址对应的Mac地址。
  • 源主机要发送数据时,先判断ARP列表中是否有IP地址对应的Mac地址,如果有,直接发送数据。如果没有,源主机向本网段的所有主机发出广播,广播的数据包信息包括:源主机IP地址、源主机Mac地址、目标主机IP地址。
  • 其他主机接收到广播之后,会先判断源主机的目标IP地址是否与自身的IP地址相符。如果不相符,就忽略。如果相符,会先将源主机的IP地址、Mac地址更新到自身的ARP列表中,然后发出单播告知源主机目标IP地址对应的Mac地址。
  • 源主机接收到单播之后,会将Mac地址更新到ARP列表中,然后利用该Mac地址发送数据。如果源主机一直没有得到响应,表示ARP查询失败。

UDP

在这里插入图片描述

TCP

TCP报文段结构
在这里插入图片描述

  • 源端口:占2个字节,发送TCP连接请求的应用的端口号
  • 目的端口:占2个字节,接收TCP连接请求的应用的端口号
  • 序号:占4个字节,指顺序编号。因为TCP是面向字节流的,序号即TCP连接传送字节流中每个字节的顺序编号。例如,报文段中序号的字段值为1,携带的数据共100字节,这就说明:该报文段第一个字节的序号为1,最后一个字节的序号为100。下一个报文段的序号从101开始。
  • 确认号:期望收到下一个报文段的第一个数据字节的序号。以上文序号的例子举例,B收到A发送过来的报文段(报文段中序号的字段值为1,携带的数据共100字节),那么B发送给A的确认报文段的确认号为101。
  • 数据偏移:占4位,最大值为60个字节,指TCP报文段数据起始处距TCP起始处的距离,即首部长度。
  • 保留:占6位,保留为以后使用。
  • 确认ACK:ACK置为1,确认号字段才有效。ACK为0,确认号字段无效。
  • 同步SYN:在连接建立时用来同步序号。当SYN=1而ACK=0,表示请求建立连接;当SYN=1且ACK=1,表示对方同意建立连接。
  • 终止FIN:用来释放一个连接。
  • 窗口:占2字节,指发送本报文段一方的接收窗口,作用是告诉对方从本报文段的确认号算起,接收方目前允许发送方发送的数据量。
  • 紧急URG:URG置为1,表示报文段有紧急数据,需要系统优先处理。
  • 推送PSH:发送方TCP把PSH置为1,并立即把报文段发送出去。接收方收到PSH=1的报文段后,就会尽快回复,而不会等缓存填满再回复。
  • 复位RST:当RST为1,表明TCP连接中出现严重差错,需要释放连接,重新建立连接。它还可以用来拒绝非法报文段。
  • 检验和: 占2字节,作用是发现首部和数据从发送端到接收端的改动。
  • 紧急指针:占2字节,指出紧急数据末尾在报文段的位置(由于紧急数据后就是普通数据,因此紧急指针同时也指出了紧急数据的字节数)。
  • 选项:作用:TCP为了适应复杂的网络环境和更好的服务应用层而进行设计的,比如设置最大报文段长度。长度可变,最长为40字节
  • 填充:使TCP的首部长度是4字节的整数倍。

MSS

  • 含义:最大报文段长度,指TCP报文段中数据字段的最大值。
  • 作用:提高传输效率。MSS较低,比如只有1个字节,而网络层的首部长度至少为40字节,利用率只有1/41,利用率很低。如果MSS很大,那在网络层时就要分片,开销也会增大。因此MSS要尽可能大,只要在网络层不分片即可。

TCP三次握手

  • 第一次握手:客户端发送请求连接的数据包给服务器端,等待服务器端确认;
  • 第二次握手:服务器端收到客户端的连接请求,但服务器端也必须要确认客户端是否可以进行连接,因此服务器端也要发送一个请求连接的数据包给客户端,等待客户端的确认;
  • 第三次握手:客户端收到服务器端的数据包,并发送确认的包给服务器端,双方就建立了连接。

TCP四次挥手

  • 第一次挥手:客户端发送结束的数据包给服务器端,客户端进入等待结束的状态;
  • 第二次挥手:服务器端收到客户端传来的结束的数据包,然后发送确认的数据包过去,自身进入等待关闭状态;
  • 第三次挥手:服务器向客户端发送结束的数据包,自身进入最后确认状态;
  • 第四次挥手:客户端收到结束的数据包,自身进入结束的状态,在结束之前,发送确认的数据包给服务器端,服务器端收到后也进入了结束状态,完成四次挥手。

三次握手原因

  • 保证可靠的数据传输。
  • 假如只进行一次握手,客户端发送连接请求后,没有收到服务端的应答,是没法判断连接是否成功的。
  • 假如只进行两次握手,服务端是无法知道客户端是否连接成功的。举一种异常场景是,客户端发送连接请求后,会等待服务器端的应答。假如客户端的SYN迟迟没有到达服务器端(第一次没到),此时客户端超时后(迟迟没有接收到服务端的确认连接数据包),会重新发送一次连接,假如重发的这次服务器端收到了,且应答客户端了,连接建立了。但是建立后,第一个姗姗来迟的SYN也到达服务端了,这时服务端会认为这是一个新连接(因为只有两次握手,服务端不清楚客户端已连接成功),会再给客户端发送一个ACK,这个ACK当然会被客户端丢弃。但是此时服务器端已经为这个连接分配资源了,而且服务器端会一直维持着这个资源,会造成浪费。

四次挥手原因

服务端收到客户端传来的结束的数据包后,服务端可能有操作未完成、需要先结束自身的操作,所以会有四次挥手。

流量控制

当接收端的数据缓冲区已满,无法处理数据来时,就发出"不再接收"的信号,发送端则停止发送,直到发送端收到"可以继续发送"的信号再发送数据。

拥塞控制

  • 使用拥塞窗口cwnd控制发送窗口大小;
  • 分组超时则认为拥塞,反之收到确认则认为网络未拥塞;
  • 拥塞则少发(cwnd减小),未拥塞则多发(cwnd增大);
  • 网络未知的情况下,cwnd从最小开始,收到确认后cwnd逐渐增大;
  • 为提高效率,开始增加速度快,到了一定阶段后增速变慢。

快速重传

  • 发送端连续发4个数据包——1,2,3,4后,收到2、3、4的确认数据包,但没有收到1的确认数据包。
  • 发送端再发送1的数据包给服务器端,不需要等到1的确认数据包到来(比计时器设定的时间短)。

TCP如何使用实现安全、可靠

  • 超时重传:TCP每发送出一个报文段后,都会启动一个定时器,对目的端传回的确认信息进行确认计时,超时后便重传。
  • 确认信号:当TCP收到一个来自TCP的报文段后,便会发送回一个确认信号。
  • 检验和:TCP将始终保持首部和数据的检验和,如果收到的报文段的检验和有差错,便将其丢弃,希望发送端超时重传。
  • 重新排序:由于IP数据报的达到可能失序,因此TCP将会数据进行重新排序,以正确的顺序交给应用层。
  • 丢弃重复:由于IP数据报有可能重复,因此TCP将会丢弃重复的数据。
  • 流控制

TCP面向字节流与UDP面向报文的区别

  • TCP下发送数据时,发送端可以分段多次发送数据,接收端可以多次接收数据。

  • UDP下发数据时,发送端会把数据一次性发送,接收端一次性接收。

    这是TCP、UDP的工作特点。

输入域名后系统的执行过程

  • 通过DNS将域名解析为IP地址。
  • 通过ARP获取IP地址对应的MAC物理地址。
  • TCP通过三次握手建立连接。
  • 建立连接后发送HTTP请求,获取服务器返回的数据。
  • 通过四次挥手断开连接。

欢迎关注公众号度熊君,一起分享交流。

猜你喜欢

转载自blog.csdn.net/qq_40796375/article/details/125029055