TCP/IP学习总结

news/2025/2/15 23:14:33/

目录

问题一:TCP/IP为什么采用分层的结构

问题二:为什么说传输层提供端到端的服务,网络层是点到点的服务

问题三:怎么确定IP分片中的第一片和分片需要注意的地方

问题四:ARP协议的理解

问题五:路由表中关键的有哪几项

问题六:TCP从哪几个方面来提供可靠性

问题七:TCP连接为什么采用的是三次握手而不是四次,断开连接为什么是四次而不是三次

问题八:TCP断开连接为什么要等待2MLS时间

问题九:重传定时器,坚持定时器,保活定时器的作用


问题一:TCP/IP为什么采用分层的结构

         TCP/IP协议簇在《TCP/IP 详解 卷一:协议》上分为四层,分别为:链路层,网络层,传输层,应用层。经过查找资料,目前共识最多的是五层模型,分别是物理层,数据链路层,网络层,传输层,应用层。从OSI七层模型演变而来,五层模型中应用层囊括了OSI的表示层和会话层。对于初学者很容易想当然的认为应用层是第一层,正确的是第一层是物理层,应用层是第七层。采用分层结构是将复杂的问题分成一个个相对简单的小问题,每层实现相应的功能,模块化的设计在后面的应用中更容易扩展,实现起来也相对容易。

问题二:为什么说传输层提供端到端的服务,网络层是点到点的服务

        传输层上的协议主要有TCP和UDP,拿TCP举例,TCP接受应用层的数据,将数据封装成一个个的TCP报文段,经过三次握手后将数据发送到接收端,TCP协议采用很多机制,比如确认,重传等保障数据能可靠地到达接收端,具体在网络中怎么传输怎么选路传输层不管这些,所以TCP提供的是一个端到端的服务。    网络层的的协议主要是IP协议,主要功能是通过路由选择算法为分组通过通信子网提供适当的路径,实现网络互连。网络中的每一个路由器都不知道完整的路径,IP选路关心的是下一跳的路由选择,将IP数据报送到下一跳的路由中,如此下去,直到到达接收端,所以说网络层提供时点到点的服务。

问题三:怎么确定IP分片中的第一片和分片需要注意的地方

   通过IP首部中的片偏移字段和标志字段中的more fragments(直面翻译是更多片,当有分片发生时,最后一片该为置0,前面的为1)来确定,第一片的片偏移为0,more fragments为1,由此可以唯一确定IP分片中的第一片分组。

   IP的分片每片的标识字段是一样的,到达接收端后通过标识字段和偏移量来进行重组。打个比方,要发送一本书过去,标识字段就好比每页的页码,一页内容分三组发送,每组的标识字段都是一样的。其次任何运输层的首部只出现在第一片的数据中,这个要特别注意。

问题四:ARP协议的理解

        ARP协议是地址解析协议,功能是将IP地址到对应的MAC地址之间提供动态的映射。那什么时候会用到ARP协议呢?在网络层数据封装成IP数据报之后,传输到链路层,链路层将数据封装成帧,在以太网的封装中,要填入接收端的MAC地址,首先会在本机的ARP缓存表中查找有没有IP对应的MAC地址,如果没有找到,这时候主机就会发送ARP请求给以太网上的每个主机。询问的内容是如果谁的IP地址与请求报文中的IP地址对应,那么请告诉我你的MAC地址。

        该部分还有免费ARP和代理ARP。免费ARP有两个作用,一是可以找出IP冲突的问题,二是若主机更换了网卡,对于收到免费ARP请求的主机会将最新的MAC地址更新到缓存表中。对于代理ARP这个也是有前提的,只有在默认路由没有设置和路由器有代理ARP功能的时候,代理ARP才会发生作用。

问题五:路由表中关键的有哪几项

        路由表的表项主要有:目标网络,网络掩码,网关(下一跳),接口,跃点数。IP选路时根据路由表进行选路,确定下一步往哪发。初学者也有一个误区,会认为匹配路由表是从上往下匹配。正确是从最长的网络掩码开始匹配的。先与网络掩码相与,在匹配对应的目标网络。若都没有找到,则会发往默认的路由。

问题六:TCP从哪几个方面来提供可靠性

1,UDP会将应用程序的数据一下子交给网络层,而不管数据有多大,所以UDP很容易导致IP分片。TCP尽量避免分片的发生,应用数据会被分割成TCP认为最合适发送的数据块。

2,TCP采用了对数据进行确认的机制,保证双方都能知道数据发送和接收的情况

3,TCP对首部和数据有一个校验和,这是首部一个强制的校验,而UDP的首部的校验和是可选的。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化,若收到段的检验和有差错,TCP将丢弃这个报文段

 4,对于每个连接TCP管理了四个定时器,分别是重传定时器,坚持定时器,保活定时器,2MLS定时器。每个定时器在特定的场景都会发挥相应的作用,TCP也是通过这四个定时器来处理数据传输过程中的特殊情况。

 5,TCP利用滑动窗口,慢启动,拥塞避免等算法来进行流量的控制。

问题七:TCP连接为什么采用的是三次握手而不是四次,断开连接为什么是四次而不是三次

      首先讲一下四次断开连接,也就是四次挥手,首先主动断开连接的一方发送一个FIN断开请求的报文段,接收方对此有个ACK应答,接收方应用程序关闭触发接收方发送一个FIN的断开请求报文段,然后发送方回复一个ACK,至此正常的断开结束。我们知道TCP是一个全双工的连接,任何一方都可以发数据接收数据,采用四次而不是三次是考虑到半打开的一个情况,假如发送发数据发送完毕后,触发一个FIN的请求,但是此时接收端还有数据未发送完毕,这时候接收端回复ACK后,还是会继续发送完数据,然后才会发送FIN断开的请求。所以必须要有四次挥手。

     经过上面的解释,那么三次握手就容易理解了,之所以存在 3-way hanshake 的说法,是因为 TCP 是双向通讯协议,作为响应一方(Responder) 要想初始化发送通道,必须也进行一轮 SYN + ACK。由于 SYN ACK 在 TCP 分组头部是两个标识位,因此处于优化目的被合并了。所以达到双方都能进行收发的状态只需要 3 个分组。

问题八:TCP断开连接为什么要等待2MLS时间

         MLS是最大报文段生存时间,标准时2分钟,但是在实际中常用是30秒,1分钟或两分钟。为什么是2MLS呢,考虑到一种情况,被动关闭的一方发送了FIN请求后,主动关闭的一方对这个请求发送ACK确认,但是假如这个ACK丢失的话,被动关闭的一方收不到这个ACK,会启动重传FIN,这时候如果主动关闭的一方不处于等待的状态,就会收不到这个重传的报文,TCP连接无法正常断开,所以启用2MLS时间,是让主动关闭的一方有足够的时间来进行对重传的确认。

          再考虑一种情况,假如没有这个等待时间,立马关闭连接,启动同样的TCP连接,网络中有上次存在迟到的报文,会混入到新的连接中,对新连接造成干扰,所以等待2MLS时间,也是等待本次连接的所有报文消亡。

问题九:重传定时器,坚持定时器,保活定时器的作用

   1,重传定时器:TCP当发送一个报文段后会维持一个重传定时器,若在规定的时间内没有收到对该报文段的确认后,则触发对该报文段的重传,重传时间是“指数退避”的

   2,坚持定时器:当接收端的窗口扩大报文段丢失后,发送端无法发送数据,接收端则在等待发送端发送数据,如此形成死锁的情况。坚持定时器就是当收到的窗口为0时,在接下来时间内若没有按时收到窗口扩大报文,则会发送一个探查窗口。

   3,保活定时器:就是探查一下对方是否还活着


http://www.ppmy.cn/news/56553.html

相关文章

KVM虚拟机的定时逐次开机设定方法-systemd方式

前言:KVM虚拟机系统是榨取服务器最大性能的一种好方法,但是谁也不想让服务器启动的时候要等待5分钟甚至以上的时间。 为了减轻服务器开机时的任务数量,需要虚拟机在开机后一段时间内,按顺序逐次启动,以达到各个服务间的…

spring security regexrequestmatcher 认证绕过漏洞(CVE-2022-22978)

漏洞详情 CVE-2022-22978 中&#xff0c;在Spring Security受影响版本范围内&#xff0c;若使用了存在特殊配置&#xff08;含 .&#xff09;的RegexRequestMatcher 的情况下可能导致权限绕过。 受影响版本&#xff1a; 5.5.0 < Spring Security < 5.5.7 5.6.0 < …

辨析 可交付成果、核实的可交付成果、验收的可交付成果、最终成果

可交付成果、核实的可交付成果、验收的可交付成果、最终成果 辨析 可交付成果 指的是在某一过程、阶段或项目完成时&#xff0c;产出的任何独特并可核实的产品、成果或服务。可交付成果可能是有形的&#xff0c;也可能是无形的。 指导与管理项目工作产生可交付成果 核实的可…

CSDN周赛第48期

不知不觉又过去两期周赛&#xff0c;相应地&#xff0c;题解也落下了。而当我再回去想下载考试报告时。。。 现在更新的速度有这么快了么&#xff1f; 可惜题目还是考过的旧题&#xff0c;尤其对我们这种老油子来说&#xff0c;最大的好处是省去了阅读理解的烦恼。 平心而论&…

Unity利用UGUI RawImage组件制作转场动画

Unity利用UGUI RawImage组件制作转场动画 最近接到了一个unity全景图的小项目&#xff0c;由于在不同的场景之间转场时直接转会太过生硬&#xff0c;因此要求有个Alpha转场的动画。于是想到两种可行的方案&#xff1a; 一、UGUI方案 用UGUI显示当前屏幕纹理&#xff0c;然后…

【计算机图形学基础教程】MFC基本绘图函数1

MFC基本绘图函数 在Windows平台上&#xff0c;应用程序的图形设备接口&#xff08;Graphics Device Interface, GDI&#xff09;被抽象为设备上下文CDC类&#xff08;Device Context, DC&#xff09;。因此&#xff0c;直接接受图形数据信息的不是显示器和打印机等硬件设备&am…

【Linux】进程信号 --- 信号产生 信号递达和阻塞 信号捕捉

&#x1f34e;作者&#xff1a;阿润菜菜 &#x1f4d6;专栏&#xff1a;Linux系统编程 文章目录 一、预备知识二、信号产生1. 通过终端按键产生信号1.1 signal()1.2 core dump标志位、核心存储文件 2.通过系统调用向进程发送信号3.由软件条件产生信号3.1 alarm函数和SIGALRM信号…

Arthas--ognl表达式

背景 arthas执行ognl表达式&#xff0c;获取对应的jvm对象数据。ognl学习&#xff0c;可以查看上篇&#xff1a;https://xiaopanjia.blog.csdn.net/article/details/130425414 基本语法 ognl express -c {hashCode} --classLoaderClass {当前的全路径 ClassLoader 信息} -x …