TCP/IP协议初学https://www.cnblogs.com/crazymakercircle/p/14499211.html
首先,我们需要了解三张表,以及它们储存的内容。
1.MAC表
MAC表主要用于记录交换机的各个端口上连接的设备的MAC地址,以便正确地将数据帧从一个端口转发到另一个端口。也就是说MAC表是交换机特有的,它所储存的是MAC地址与端口的映射。
数据帧过来了->交换机查MAC表->找到端口传过去
2.路由表
路由表记录了网络设备所知道的网络拓扑结构信息,包括如何到达不同网络或主机的路径信息。这些路径信息指导设备在收到数据包时如何选择合适的下一跳路由器或出接口进行转发。(值得注意的是:路由表的信息通常由网络管理员手动配置或者通过路由协议自动学习得到。)
数据帧通过默认网关到达路由器->路由器查看路由表->通过目标地址找到端口传过去
但是,我们知道传递数据帧必须要知道MAC地址,怎么通过IP地址,推出MAC地址呢?答案是arp表。
下一跳:路由表中的每一条记录都会包含一个指向下一跳的信息,当设备根据目的IP地址查找到匹配的路由表记录时,会根据该记录中指定的下一跳信息来决定将数据包发送到哪个设备或接口。
3.ARP表
ARP表记录了本地网络中每个IP地址对应的MAC地址,以及它们之间的关联。
ARP表的填充过程通常由ARP协议自动完成。当设备需要将数据包发送到另一个设备时,它会首先查看本地的ARP表,看是否已经有目标IP地址对应的MAC地址映射记录。如果有,设备可以直接使用这个MAC地址来封装数据包并发送;如果没有,设备会发送一个ARP请求广播,请求网络中的其他设备告知它们的MAC地址。收到这个请求的设备会回复一个ARP响应,包含自己的MAC地址。收到响应后,设备会将这个新的IP地址与MAC地址的映射关系添加到ARP表中,并使用这个MAC地址进行后续的数据包转发。
需要某个设备的MAC地址->ARP表中是否已经有需要的MAC地址了?直接发送:发送请求广播->将获取的内容添加到ARP表,再发送
4.下面看一个实例
从A发送数据到F
- 首先A(192.168.0.1)通过子网掩码(255.255.255.0)计算出自己与F(192.168.2.2)并不在同一个子网内,于是决定发送给默认网关(192.168.0.254)。
- A 通过ARP找到默认网关192.168.0.254的MAC地址。
- A 将源MAC地址(AAAA)与网关MAC地址(ABAB)封装在数据链路层头部,又将 IP地址(192.168.0.1)和目的 P地址(192.168.2.2)(注意这里千万不要以为填写的是默认网关的IP地址,从始至终这个数据包的两个IP地址都是不变的,只有MAC地址在不断变化)封装在网络层头部,然后发包。
- 交换机1收到数据包后,发现目标 MAC 地址是 ABAB,转发给路由器1
- 数据包来到了路由器1,发现其目标IP地址是 192.168.2.2,查看其路由表,发现了下一跳的地址是192.168.100.5
- 所以此时路由器1需要做两件事,第一件是再次匹配路由表,发现匹配到了端口为2,于是将其封装到数据链路层,最后把包从 2 号口发出去。
- 此时路由器2收到了数据包,看到其目的地址是 192.168.2.2,查询其路由表,匹配到端口号为1,准备从1号口把数据包送出去。
- 但此时路由器2需要知道 192.168.2.2 的 MAC 地址了,于是查看arp缓存,找到其MAC地址为FFFF,将其封装在数据链路层头部,并从1号端口把包发出去。
- 交换机 3 收到了数据包,发现目的MAC地址为FFFF,查询其 MAC 地址表,发现应该从其 6 号端口出去,于是从 6 号端口把数据包发出去。
- F 最终收到了数据包!并且发现目的MAC地址就是自己,于是收下了这个包。
HTTP报文传输过程
应用层->传输层->网络层->链路层->链路层->网络层->传输层->应用层
- HTTP请求的生成
客户端(如浏览器)生成一个HTTP请求报文,包含请求行、请求头和请求体。 - 传输层封装
HTTP请求报文在传输层通过TCP协议进行封装。
TCP连接建立:客户端与服务器之间通过三次握手建立TCP连接。
TCP报文段封装:HTTP请求报文被封装到TCP报文段中,加上TCP头信息(源端口、目的端口、序列号、确认号等)。 - 网络层封装
在网络层,TCP报文段被封装到IP数据包中。
IP数据包封装:TCP报文段加上IP头信息(源IP地址、目的IP地址等),形成IP数据包。 - 数据链路层封装
在数据链路层,IP数据包被封装到帧中,准备通过物理网络传输。
帧封装:IP数据包加上数据链路层头(如以太网头)和尾,形成数据帧。 - 物理层传输
数据帧在物理层被转换为比特流,通过物理介质(如以太网、光纤等)进行传输。 - 服务器接收数据
服务器接收到比特流后,依次通过各层协议进行解封装,直到获取到HTTP请求报文。
物理层:比特流转换为数据帧。
数据链路层:解析数据帧,提取IP数据包。
网络层:解析IP数据包,提取TCP报文段。
传输层:解析TCP报文段,提取HTTP请求报文。 - 服务器处理请求
服务器根据HTTP请求报文中的信息,处理请求(如查找请求的网页资源)并生成HTTP响应报文。 - 服务器响应报文的封装和发送
服务器将HTTP响应报文依次封装在TCP报文段、IP数据包和数据帧中,通过物理层传输给客户端。 - 客户端接收响应
客户端接收到比特流后,依次通过各层协议进行解封装,直到获取到HTTP响应报文。
物理层:比特流转换为数据帧。
数据链路层:解析数据帧,提取IP数据包。
网络层:解析IP数据包,提取TCP报文段。
传输层:解析TCP报文段,提取HTTP响应报文。 - 客户端处理响应
客户端处理HTTP响应报文,展示网页内容或执行相应的操作。 - 连接关闭
在HTTP/1.1中,默认情况下TCP连接保持开启,可以复用。如果不再需要,客户端和服务器可以通过四次挥手关闭TCP连接。
数据的封装和分用
假设你在浏览器中访问一个网站,浏览器将生成HTTP请求,这是应用层数据。
下面是数据封装的过程:
1应用层: 生成HTTP请求数据。
2传输层: TCP协议为HTTP请求数据加上TCP头,形成TCP段。
3网络层: IP协议为TCP段加上IP头,形成IP包。
4数据链路层:以太网协议为IP包加上以太网头和尾,形成以太网帧。
5物理层: 将以太网帧转换为比特流,通过网络传输。
当数据到达目标服务器时,进行分用过程:
1物理层: 接收比特流,重组为以太网帧。
2数据链路层: 解析以太网帧,提取出IP包。
3网络层: 解析IP包,提取出TCP段。
4传输层: 解析TCP段,提取出HTTP请求数据。
5应用层: 处理HTTP请求并生成响应。
这个过程就像寄快递一样,打包和拆包。