你以为键入网址后只是等待吗?惊!原来网页显示背后隐藏着这些奇妙步骤(中)

简介: 通过对TCP/IP协议的深入研究,我们可以更好地理解网络通信的整个过程,以及各个协议在其中的作用。这对于我们理解和解决网络通信中的问题非常重要。希望通过本文的学习,能够对TCP/IP协议有更深入的了解,并能够应用到实际的网络通信中。

引言

在之前的讨论中,我们已经对HTTP和DNS协议进行了详细的探讨,这些协议主要用于应用层的通信。然而,今天我们将把重点转移到网络层和传输层的协议上,也就是TCP/IP协议。所以,我们将深入研究这些协议的工作原理和作用。

可靠传输-TCP

HTTP是一种基于TCP协议传输的协议。在TCP传输数据之前,需要进行三次握手来建立连接。如果HTTP请求消息的长度超过了MSS(Maximum Segment Size)的限制,那么TCP就需要将HTTP数据拆分成多个块来发送,而不是一次性发送所有数据。

image

在网络中,MTU(Maximum Transmission Unit)指的是一个网络包的最大长度,例如以太网中一般为1500字节。而MSS则是在去除IP和TCP头部之后,一个网络包所能容纳的TCP数据的最大长度。

当数据长度超过MSS时,数据会被拆分成多个块,每个块的长度为MSS。每个被拆分的数据块都会被放入单独的网络包中,并在每个被拆分的数据块中添加TCP头信息,然后由IP模块来发送这些数据。

image

TCP 报文生成

TCP协议中涉及两个端口,一个是浏览器监听的端口(通常是随机生成的),另一个是Web服务器监听的端口(HTTP默认端口号为80,HTTPS默认端口号为443)。

一旦建立了连接,TCP报文的数据部分就包含了HTTP头部和数据。组装好TCP报文后,就会交给下一层的网络层来处理。

因此,网络包的报文可以用下图表示:

image

远程定位-IP

在 TCP 模块执行连接、收发、断开等操作的各个阶段,都需要委托 IP 模块将数据封装成网络包,并发送给通信对象。在 IP 协议中,需要包含源地址 IP 和目标地址 IP 两个关键信息:

  • 源地址 IP 是指客户端输出的 IP 地址,它表示数据包的发送方。
  • 目标地址 IP 是通过 DNS 域名解析获取的 Web 服务器的 IP 地址。

在进行 TCP 传输时,由于 HTTP 是经过 TCP 传输的,因此在 IP 包头的协议号字段中需要填写为 06(十六进制),表示协议为 TCP。

当客户端存在多个网卡时,即有多个 IP 地址可供选择时,需要根据具体情况来确定选用哪个 IP 地址作为源地址。这个选择过程相当于在多个网卡中判断应该使用哪个网卡来发送数据包。

为了确定源地址 IP,需要根据路由表规则进行判断。路由表规则可以指定特定的条件,如目标 IP 地址、接口优先级等,从而决定使用哪个网卡的 IP 地址作为源地址。根据路由表规则的判断结果,就可以确定应该使用哪个网卡的 IP 地址作为源地址 IP。

IP 报文生成

image

两点传输-MAC

在生成 IP 头部之后,接下来网络包还需要在 IP 头部的前面添加 MAC 头部。

MAC 头部是以太网使用的头部格式,它包含了发送方和接收方的 MAC 地址等重要信息。MAC 头部的格式包括目标 MAC 地址、源 MAC 地址、类型字段等。

在发送网络包之前,需要在 IP 头部之前添加 MAC 头部,以确保数据可以正确地在以太网中传输。MAC 头部的目标 MAC 地址指示了网络包应该传输到哪个设备,源 MAC 地址指示了数据的来源。

image

在 MAC 包头中,发送方和接收方的 MAC 地址是必须包含的信息,用于实现两点之间的传输。通常在 TCP/IP 通信中,MAC 包头的协议类型只使用以下两种:

  • 0800:表示 IP 协议
  • 0806:表示 ARP 协议

发送方的 MAC 地址获取相对简单,因为 MAC 地址是在网卡制造时写入到 ROM 中的,只需要将这个值读取出来,并写入到 MAC 包头中即可。

然而,接收方的 MAC 地址相对复杂一些。为了让以太网帮助我们将数据包发送给正确的目标,我们需要提供对方的 MAC 地址。因此,我们需要先确定应该将数据包发送给谁,这可以通过查看路由表来获得。在路由表中找到匹配的条目后,我们可以将数据包发送给网关(Gateway)列中对应的 IP 地址。

当我们不知道对方的 MAC 地址时,可以通过使用 ARP(地址解析协议)来获取。ARP 协议会以广播的形式在以太网中发送一个请求,询问所有设备:“谁是拥有这个 IP 地址的设备?请告诉我你的 MAC 地址。”然后,将会有一个设备回答:“这个 IP 地址是我的,我的 MAC 地址是XXXX。”

image

如果对方设备和我们在同一个子网中,通过上述操作就可以获取到对方的 MAC 地址。然后,我们将这个 MAC 地址写入 MAC 包头部,这样 MAC 包头部就完成了。

需要注意的是,ARP 协议只在同一个子网中有效。如果目标设备不在同一子网中,就需要借助路由器来转发数据。在这种情况下,我们需要找到网关的 MAC 地址,将其作为接收方的 MAC 地址,以便将数据包正确地发送给网关,从而实现跨子网的通信。

MAC 报文生成

image

出口-网卡

IP 生成的网络包是存放在内存中的二进制数据,无法直接发送给对方。为了将数据在网络上传输,我们需要将其转换为电信号。这个过程由网卡负责执行,而网卡驱动程序则用于控制网卡。

当网卡驱动程序从IP模块获取到网络包后,它会将其复制到网卡内的缓存区中。然后,在数据包的开头添加报头和起始帧分界符,并在末尾添加用于检测错误的帧校验序列。这样,数据包就准备好可以通过网线发送了。

image

在数据包的处理过程中,起始帧分界符起着重要的作用,它是一个特定的标记,用来表示包的起始位置。当网卡驱动程序将数据包复制到网卡的缓存区后,添加起始帧分界符,这样接收方就可以准确地确定数据包的开始位置。

另外,末尾的帧校验序列(FCS)也是非常重要的。在数据包传输过程中,可能会发生噪声、干扰或其他错误,导致数据包损坏。为了确保数据的完整性,网卡在数据包的末尾添加了FCS。接收方在接收数据包时,会利用FCS对数据包进行校验,以检测是否有损坏或错误发生。如果校验结果与FCS不匹配,接收方将知道数据包在传输过程中发生了错误。

最后,当数据包准备好之后,网卡会将其转换为电信号,并通过网线发送出去。这样,数据包就能够被目标设备接收和处理。这个过程中,网卡起到了关键的作用,确保了数据的有效传输。

总结

通过本文的探讨,我们深入研究了TCP/IP协议在网络层和传输层的工作原理和作用。我们了解到,在TCP协议中,数据需要进行三次握手来建立连接,并且在传输过程中需要将数据拆分成多个块来发送。而在IP协议中,需要确定源地址和目标地址,并根据路由表规则来选择合适的网卡的IP地址作为源地址。在MAC协议中,需要添加MAC头部来指定发送方和接收方的MAC地址,以实现两点之间的传输。最后,在网卡的作用下,将数据转换为电信号并发送出去,确保数据的有效传输。

相关文章
|
3月前
|
移动开发 JavaScript C#
分享53戏源代码总有一个是你想要的(亲测每一个均可用)
分享53戏源代码总有一个是你想要的(亲测每一个均可用)
24 0
|
4月前
|
缓存 网络协议 安全
你以为键入网址后只是等待吗?惊!原来网页显示背后隐藏着这些奇妙步骤(终章)
这篇文章简要介绍了计算机网络中交换机和路由器的工作原理,以及它们在网络通信和连接中的重要作用。交换机利用MAC地址表实现数据包的转发,而路由器则根据IP地址进行转发决策,将数据包从一个网络转发到另一个网络。通过交换机和路由器的协同工作,网络实现了高效的数据传输和通信。
|
4月前
|
网络协议 网络架构
你以为键入网址后只是等待吗?惊!原来网页显示背后隐藏着这些奇妙步骤(上)
当我们键入一个网址后,从键入网址到网页显示之间会发生许多复杂的步骤。这篇文章旨在详细解释这一过程,帮助读者深入了解HTTP、DNS和协议栈等相关知识。通过这篇文章,读者可以消除疑惑,也可巩固对网络通信的理解,从而更好地应用和利用互联网。
你以为键入网址后只是等待吗?惊!原来网页显示背后隐藏着这些奇妙步骤(上)
|
5月前
|
前端开发
清明节,如何用代码让网页变灰
清明节,如何用代码让网页变灰
|
7月前
|
Web App开发 前端开发 JavaScript
|
9月前
|
数据安全/隐私保护 iOS开发 芯片
将任意应用窗口置顶显示,这个工具太强了。
将任意应用窗口置顶显示,这个工具太强了。
|
11月前
|
机器学习/深度学习 人工智能 计算机视觉
生成视频如此简单,给句提示就行,还能在线试玩
生成视频如此简单,给句提示就行,还能在线试玩
|
11月前
|
Java
手把手一步一步教你使用Java开发一个大型街机动作闯关类游戏20之enemy被攻击显示后退动画(block效果)
手把手一步一步教你使用Java开发一个大型街机动作闯关类游戏20之enemy被攻击显示后退动画(block效果)
134 0
|
安全 Windows
将爱心代码设为电脑屏保,还能假装黑客大佬,在酷炫的界面中保护隐私
本文介绍 Hacker Screen Saver 一款开源 Windows 屏保的使用。Hacker Screen Saver 是一款 .NET 设计的屏幕保护程序,可以显示 HTML 页面,你可以将黑客模拟器的网页,或者爱心代码网页设置为你的 Windows 电脑屏保。详细介绍了软件的使用和对应网页的修改和制作注意事项。
545 0
将爱心代码设为电脑屏保,还能假装黑客大佬,在酷炫的界面中保护隐私