当前位置: 首页 > news >正文

网络编程—TCP/IP模型(数据链路层了解与知识补充)

上篇文章:

网络编程—TCP/IP模型(IP协议)https://blog.csdn.net/sniper_fandc/article/details/147025311?fromshare=blogdetail&sharetype=blogdetail&sharerId=147025311&sharerefer=PC&sharesource=sniper_fandc&sharefrom=from_link

目录

1 数据链路层

1.1 MTU对IP协议的影响

1.2 MTU对UDP协议的影响

1.3 MTU对TCP协议的影响

2 DNS协议

3 网络原理知识总结


1 数据链路层

        数据链路层负责两个相邻节点之间的转发,数据链路层采用以太网协议,网线就是以太网线。以太网帧的格式如下:

        源地址和目的地址:是指网卡的硬件地址(也叫MAC地址),长度是48位,是在网卡出厂时固化的,一个设备的MAC地址唯一。

        帧协议类型:有三种值,分别对应IP、ARP、RARP,ARP是利用广播根据IP地址寻找对应MAC地址,RARP根据MAC地址寻找对应的IP地址。

        注意:每台主机都维护一个ARP缓存表,可以用arp -a命令查看。缓存表中的表项有过期时间(一般为20分钟),如果20分钟内没有再次使用某个表项,则该表项失效,下次还要发ARP请求来获得目的主机的硬件地址。

        帧末尾:是CRC校验码。

        以太网帧的数据长度是46-1500字节(不足46字节的数据包会在其后补位,比如ARP数据包),把最大传输长度1500字节称为MTU(不同的数据链路层标准的MTU不同)。如果网络层的数据包超过1500字节,就会导致IP数据包分片(这是主要原因)。

        注意:由于数据链路层是负责相邻两个节点的传播,因此以太网帧在传播过程中的源MAC是上一个节点,而目的MAC是下一个节点,MAC地址是通过ARP协议获取的。

1.1 MTU对IP协议的影响

        将较大的IP包分成多个小包,并给每个小包打上标签。每个小包IP协议头的16位标识都是相同的。每个小包的IP协议头的3位标志字段中,第2位置为0,表示允许分片,第3位来表示结束标记(当前是否是最后一个小包,是的话置为1,否则置为0)。到达对端时再将这些小包,会按顺序重组,拼装到一起返回给传输层。一旦这些小包中任意一个小包丢失,接收端的重组就会失败。但是IP层不会负责重新传输数据。

1.2 MTU对UDP协议的影响

        UDP携带的数据超过1472(1500-20(IP首部)-8(UDP首部)),那么就会在网络层分成多个IP数据报。这多个IP数据报有任意一个丢失,都会引起接收端网络层重组失败。那么这就意味着,如果UDP数据报在网络层被分片,整个数据被丢失的概率就大大增加。

1.3 MTU对TCP协议的影响

        TCP报文段也不能无限大,还是受制于MTU。TCP的报文段的最大消息长度,称为MSS(Max Segment Size)。TCP在建立连接的过程中,通信双方会进行MSS协商。最理想的情况下,MSS的值正好是在IP不会被分片处理的最大长度(这个长度仍然是受制于数据链路层的MTU)。双方在发送SYN的时候会在TCP头部写入自己能支持的MSS值。然后双方得知对方的MSS值之后,选择较小的作为最终MSS。MSS的值就是在TCP首部的40字节变长选项中(kind=2)。

2 DNS协议

        DNS既是一个协议,又是一个系统,它工作在应用层,建立了网址(域名)和IP地址之间的关系。最早的DNS系统是hosts文件,通常在C:\Windows\System32\drivers\etc路径下:

        hosts文件中左侧是IP地址,右侧是对应的网址。但是这种方式现在很少使用,这是由于网站现在太多了,全存在hosts文件中存不下。现在使用的方式是把网址IP映射关系存储在DNS服务器,哪个主机需要进行DNS解析,就向DNS服务器发送请求获取这种映射关系。

        注意:主机如何知道DNS服务器的地址?由家庭路由器获取,家庭路由器由运营路由器获取,运营路由器由网管配置最近的DNS服务器地址。

        DNS服务器为了能抗住访问量过高的请求会进行如下操作:

        1.主机进行DNS解析后,把映射关系缓存到本地。

        2.在全世界架设多个DNS的镜像服务器,镜像服务器从根服务器进行数据的同步。

3 网络原理知识总结

        对于网络原理的知识总结,这里用一个问题来贯穿整个网络原理的知识,在浏览器地址栏输入URL开始,到看到网页,中间过程发生了什么事?

        1.应用层:(1)DNS解析,如果是第一次访问该域名,地址栏输入的域名主机不知道对应的IP,就会给DNS服务器发送请求,请求的内容是域名的IP是什么。DNS服务器返回响应,响应的内容是域名对应的IP。主机拿到IP后会在本地做地址IP映射,方便多次访问同一个域名而不用再次获取IP。(2)构造HTTP请求,浏览器把希望获得的页面内容的需求构造成HTTP请求发送给URL对应的服务器。

        2.传输层:HTTP协议使用TCP协议来传输(封装)(1)三报文握手建立连接(细节:客户端发送SYN报文,服务器发送SYN+ACK报文,客户端再发ACK报文,这样做的目的是验证双端收发能力,不能两报文或四报文)(2)传输数据(细节:报文段序号和确认号、确认应答、超时重传、滑动窗口、流量控制、拥塞控制等机制)。

        3.网络层:传输层报文在网络层统一使用IP协议,添加IP首部(封装),填写源IP和目的IP,构造成IP数据包采用一跳一跳的形式传播(路由表)。

        4.数据链路层:采用以太网协议对IP数据包进行封装,添加首部(源MAC地址和目的MAC地址,使用ARP协议来进行IP和MAC地址映射)和尾部构造成以太网帧,并根据以太网帧数据载荷最大长度(MTU)来对IP数据包进行分片(标识、标志、片偏移),以太网帧在传播过程中会修改源MAC和目的MAC(分别对应传播过程的上一个节点和下一个节点)。

        5.物理层:以太网帧在物理层最终会以比特流的形式传播,传播介质是光纤或电缆,因此数据最终是以光信号(频率的快慢来代表1或0)或电信号(电平的高低来代表1或0)来传播。

        6.1-5的过程是封装的过程,最终经过物理层的传输,数据到达服务器端,服务器端将比特流从物理层向上层进行层层分用(每层负责本层的校验和的验证、首部尾部的拆除、数据报顺序的排序(可能有多个数据报)),最终得到请求的内容由应用层进行处理,即后端代码来根据请求计算响应(业务代码的核心),并返回响应。

        7.响应经过1-5的步骤后,到达客户端,浏览器经过解析,最终将页面渲染到用户的显示屏上。如果后续长时间没有数据交互或用户关闭页面,在传输层的连接就会断开,经过四次挥手断开连接(客户端发送FIN报文,服务器返回ACK,可能经过一定时间的数据处理,服务器再次发送FIN报文,客户端返回ACK,服务器接收到ACK进入关闭状态,客户端等待2MSL后再关闭(防止客户端第四次挥手的ACK报文丢失服务器超时重传再发送FIN后客户端能及时处理,同时保证所有的报文在2MSL都可以消失在网络中避免影响下次连接))

        注:上述过程只是简单的脉络,对于细节部分,需要补充,在后续的学习中会不断补充其他有关但未讲述细节的部分,建议越详细越好。

相关文章:

  • DApp实战篇:前端技术栈一览
  • [ Redis ] | 初识Redis
  • 【数据结构】图的存储
  • ES使用聚合aggregations实战(自用:2025.04.07更新)
  • 铰链损失函数 Hinge Loss和Keras 实现
  • leetcode-代码随想录-哈希表-赎金信
  • Qt中的多种输出方式,信号与槽的基本使用
  • 场内期权和场外期权开户有什么区别?
  • 【学习笔记】Gymnasium入门(一)
  • 大模型:大模型部署Ollama和Dify
  • Python+AI提示词用贝叶斯样条回归拟合BSF方法分析樱花花期数据模型构建迹图、森林图可视化
  • 学透Spring Boot — 016. 魔术师 - Spring MVC Conversion Service 类型转换
  • SSL证书颁发机构有哪些呢
  • Mysql——DbUtils的使用
  • 二叉树——队列bfs专题
  • Docker容器中的ubuntu apt update报错 解决办法
  • 【58】编程技巧:单片机编程命名规范
  • Oracle数据库数据编程SQL<4.3 事务的补充内容(了解)>
  • 十、C++速通秘籍—多进程
  • 牛客春招刷题训练营 算法 Java 3月27日 杨辉三角的变形 计算日期到天数转换 而后单调
  • 天津制作公司网站/优秀营销软文100篇
  • 做彩票网站都是怎么拉人的/竞价推广培训课程
  • 零基础一个人做网站/seo做的好的网站
  • 可牛在线制作图片/班级优化大师使用指南
  • 苏州网站建设logo/百度seo怎么操作
  • 一个空间放几个网站/云南疫情最新消息