一直想写一篇关于计算机网络的总结,这次算是实现了,肯定不会一次性写完, 我会不定期的更新, 感兴趣的朋友可以持续关注一下。

网络模型

七层模型(从下到上排序)

  • 物理层

    建立、维护、断开物理连接

  • 数据链路层

    建立逻辑连接、进行硬件地址寻址、差错校验等功能。将比特组合成字节进而组合成帧,用MAC地址访问介质,错误发现但不能纠正。

  • 网络层

    进行逻辑地址寻址,实现不同网络之间的路径选择。
    我们熟悉的 IP 协议,还有 ARP、ICMP都是在这一层

  • 传输层

    定义传输数据的协议端口号,以及流控和差错校验。
    最著名的就是TCP、UDP

  • 会话层

    建立、管理、终止会话。

  • 表示层

    数据的表示、安全、压缩

  • 应用层

    网络服务的用户的接口。直接与用户相连。日常使用的HTTP、HTTPS都是在这一层。

五层协议

我们重点了解现在的五层模型,在七层模型的基础上,将数据链路层和物理层合并为网络接口层,应用层、表示层、会话层合并为应用层。

HTTP协议传输时报文内容结构变化
HTTP协议传输时报文内容结构变化

下面我们专门说几个重点的层级、协议

数据链路层

这一层其实没什么可说的, 他们把上一层(网络层)数据报加头和尾,封装成帧, 其中包含源 MAC 地址 和目的 MAC 地址。
这里的差错控制方式基本没有,只有差错检验(CRC), 那么数据链路层是怎么知道目的地址的 MAC 地址呢?
这就要说到网络层的 ARP 和 RARP 协议

网络层

ARP 和 RARP协议

ARP(地址解析)协议是一种解析协议,本来主机是完全不知道这个IP对应的是哪个主机的哪个接口,当主机要发送一个IP包的时候,会首先查一下自己的ARP高速缓存(就是一个IP-MAC地址对应表缓存)。

如果查询的IP-MAC值对不存在,那么主机就向网络发送一个ARP协议广播包,这个广播包里面就有待查询的IP地址,而直接收到这份广播的包的所有主机都会查询自己的IP地址。如果收到广播包的某一个主机发现自己符合条件,那么就准备好一个包含自己的MAC地址的ARP包传送给发送ARP广播的主机。

而广播主机拿到ARP包后会更新自己的ARP缓存(就是存放IP-MAC对应表的地方)。发送广播的主机就会用新的ARP缓存数据准备好数据链路层的的数据包发送工作。

RARP协议的工作与此相反,不做赘述。

IP 协议

注意,IP 是不可靠传输协议,他并没有提供数据传达以后的差错控制机制。

TCP、UDP

TCP、UDP
TCP、UDP
TCP、UDP相应应用层协议
TCP、UDP相应应用层协议

什么时候应该使用TCP?
当对网络通讯质量有要求的时候,比如:整个数据要准确无误的传递给对方,这往往用于一些要求可靠的应用,比如HTTP、HTTPS、FTP等传输文件的协议,POP、SMTP等邮件传输的协议。

什么时候应该使用UDP?
当对网络通讯质量要求不高的时候,要求网络通讯速度能尽量的快,这时就可以使用UDP。
例如:QQ电话、QQ视频

TCP连接的建立与终止

三次握手

  1. 客户端 - > 服务端 (SYN = 1, Seq = X)
  2. 服务端 - > 客户端 (SYN = 1, ACK = X + 1, Seq = Y)
  3. 客户端 - > 服务端 (ACK = Y + 1, Seq = Z)

为什么要三次握手?
如果有消息在传输的过程中由于某些原因没有及时传到服务端,等到在传到服务端的时候,服务端已经不需要了,但是此时接收到过期消息的服务端仍然认为这是一个请求建立连接的报文,那么他就会向客户端发送一个确认连接(第二次握手),如果仅有两次握手,此时连接建立,而客户端并没有消息传入服务端,(本来就是服务端自作多情嘛),那么服务端就会一直变为等待消息传入状态,造成资源浪费。

四次挥手

  1. 主动方 - > 被动方(Fin = 1,ACK = Z Seq = X)
  2. 被动方 - > 主动方 (ACK = X + 1, Seq = Z)
  3. 被动方 - > 主动方 (Fin = 1, ACK = X, Seq = Y)
  4. 主动方 - > 被动方 (ACK = Y, Seq = X)

关于四次挥手,我本人是比较生疏的,所以这里我分别解释一下4次挥手的含义

  1. 主动方表示:我没有数据要发给你了 进入FIN_WAIT_1状态
  2. 被动方表示:我同意了,稍等 主动方收到之后,进入FIN_WAIT_2状态(半连接,等待被动方忙完手头工作)
  3. 被动方表示:关闭连接吧 被动方正式进入LAST_ACK状态 主动方进入
  4. 主动方表示:好的 主动方进入 TIME_WAIT状态, 被动方接收之后关闭连接,主动方等2MSL之后没有收到回复,也关闭连接

为什么要进行四次挥手呢?
TCP协议是一种面向连接的、可靠的、基于字节流的运输层通信协议。TCP是全双
工模式,也就是你传给我的同时我也可以传给你。这就意味着,当主机1发出FIN报文段时,只是表示主机1已经没有数据要发送了,主机1告诉主机2,它的数据已经全部发送完毕了;但是,这个时候主机1还是可以接受来自主机2的数据;当主机2返回ACK报文段时,表示它已经知道主机
1没有数据发送了,但是主机2还是可以发送数据到主机1的;当主机2也发送了FIN报文段时,这个时候就表示主机2也没有数据要发送了,就会告诉主机1,我也没有数据要发送了,之后彼此就会愉快的中断这次TCP连接。

Http请求和响应

(未完待续)