一、计网基础
计算机网络OSI模型各层的作用与意义:
- 物理层(Physical Layer):处理电信号 传输比特流
- 负责在物理媒介上传输原始的比特流。
- 定义了电气、机械、过程和功能标准,以实现不同设备之间的连接和数据传输。
- 数据链路层(Data Link Layer) ——>二进制--电信号
(控制网络层和物理层之间的通信)
- 负责在相邻节点之间的可靠链接。
- 通过帧定界和同步、物理地址寻址、流量控制、错误检测和修正等机制,确保数据的可靠传输。
- 网络层(Network Layer)——>IP寻址;路由选择
- 负责在源和目的地之间选择数据传输路径。
- 处理数据包的路由和转发,实现不同网络的互联。
- 定义了IP地址和路由协议,如IP、ICMP、OSPF、BGP等。
- 传输层(Transport Layer)——>TCP/UDP,建立维护管理一个端到端的链接
- 提供端到端的数据传输服务。
- 负责数据的分段、传输控制、数据完整性和可靠性。
- 定义了端口号以区分不同的服务和进程,如TCP和UDP。
- 会话层(Session Layer) ——>编码---二进制字符串
(建立、维护、管理一个会话连接)
- 负责建立、管理和终止应用程序之间的会话。
- 确保会话的一致性和同步。
- 在TCP/IP模型中,会话层的功能通常由应用层的协议实现。
- 表示层(Presentation Layer) ——>数据格式化
- 负责数据的表示、编码和转换。
- 确保一个系统的应用层所发送的信息可以被另一个系统的应用层读取。
- 包括数据加密、压缩和格式化等。
- 应用层(Application Layer) ——>自然语言(抽象语言)---编码(指代一种提前规定好的对应关系)
- 提供网络服务给最终用户。
- 包括所有高层协议和应用程序,如HTTP、FTP、SMTP、DNS等。
OSI参考模型:开放式系统互联模型;OSI/RM;ISO这个组织提出。 核心点--分层
每个子层相互独立且相互依赖
ARP协议:
- 正向ARP
- 通过已知的IP地址,来获取目的的MAC地址
- 本机如果获取到对端的回复信息,那么则会将数据报文中的远IP地址和源MAC地址记录在本地的ARP缓存表中,每项表单老化时间为180s
- 反向ARP
- 通过已知的MAC地址,来获取目标的IP地址
- 免费ARP
- 自我介绍,冲突检测
TCP/IP模型:一种即使通信线路被破坏也能通过其他线路进行通信的技术 ——>分组网络

- 开放性
- 实用性
- 标准性 ---RFC文档

PDU---协议数据单元
数据报文
数据段
数据包
数据帧
比特流
将数据从上而下,从应用层到物理层的整个加工过程称为 ---封装
反过来,从物理层到应用层的加工过程称为 ---解封装
应用层---Data,不同的应用,需要封装的内容是不同的。
传输层---主要是使用端口号来标定应用。真正进行工作的是TCP和UCP两个协议。
网络层---主要进行封装IP地址,来进行逻辑寻址。真正工作的是IP地址。
数据链路层---封装MAC地址,进行物理寻址。真正工作的一般是以太网协议。
物理层---


以太网类型字段:
0x0800---网络层使用的是IP协议
0x0806---网络层使用的是ARP协议
协议字段:
6---TCP协议
17---UDP协议
跨层封装:

物理层---传输数据比特流,而不是具体的传输媒体。
任务:确定传输媒体的接口标准。
三大特性:
- 机械特性---规定连接时采用的接口形状和数据。
- 电气特性---规定传输的二进制的位数和电压的范围。
- 功能特性---指明某一个电频标识何种意义。
数据,信号,码元:
- 数据---指传输信息的实体;数据的传输方式分为串行传输和并行传输。
- 串行传输---1个bit、1个bit的按照时间顺序的传输。(网线
- 并行传输---若干bit通过多条通信信道同时传输。(网卡与芯片之间的信息传输
拓展:
串行通信指将数据一位一位依次排列传输
并行通信指将多位数据同时进行传输
串行通讯特点:距离远,抗干扰能力强大,速度慢,成本低,占用资源低
并行通信特点:距离近,抗干扰弱,速度快,成本高
串行通信从时序来看分为同步和异步
同步通信发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式,简单说就是发送数据时间固定
异步通信发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式。简单来说,传输数据时间不固定
- 信号---是数据的电气或电磁表现形式,是数据在传输过程中的存在形式
- 模拟信号---连续变化的信号
- 数据信号---取值仅允许优先的几个数值的信号
- 码元---是指一个固定时长的信号波形表示的一位k进制数字,是数字信号的计量单位。
- 速率---数据率,数据传输的速率。表示单位时间内传输的数据量。
- 一般数据率使用码元传输速率和信息传输速率表示。
- 码元传输速率---波特率(Baud)
- 信息传输速率---比特率(b/s)
- 两者关系:
- 一般数据率使用码元传输速率和信息传输速率表示。
若一个码元携带n bit的信息量,则M Baud的码元传输速率所对应的信息传输速率为M*n b/s
- 带宽---最高的数据率。
- 一般使用比特率来描述
通信交换技术
电路交换:
在进行数据传输前,两个节点之间,必须先建立一套专用(双方独占)的物理通信路径。

优点:
- 传输时延小,因为专用通道
- 有序传输--->没有乱序行为
- 没有冲突
- 使用范围广--->模拟信号和数字信号都可以传输
- 实用性强
缺点:
- 线路独占,信道使用率低
- 灵活性差
- 没有数据存储能力
报文交换:
数据交换的单位是报文,报文携带有目的地址、源地址等信息。存储-转发方式
特点:存储接受到的报文,判断其目的地址以选择路径,最后,在下一跳转发设备空闲时,将数据转发给
下一跳设备。

优点:
- 无序建立连接
- 动态的分配线路:交换设备先存储报文,然后选择一条合适的空闲线路,将报文转发出去
- 线路可靠性高
- 线路利用率高 --->可以为多个目标提供服务
缺点:
- 数据报文进入交换节点后,需要经历 存储--转发 其本质是在交换设备内部进行数据检测。 时延较大
- 只适用于数字信号
分组交换
通信双方以分组为单位,使用存储--转发机制实现数据交互的通信方式。 ---包交换
包交换:将用户通信的数据划分成多个更小的等长数据段,在每个数据段的前面都加上必要的控制信息,每
个携带有控制信息的数据段就构成了一个分组。

- 数据报分组交换
- 虚电路分组交换
优点:
- 线路利用率高
- 及那话数据存储过程
- 加速传输:逐个报文单独选择链路进行发送,同步进行
- 减小了数据出错的几率
缺点:
- 需要传输额外的信息---每个小的分组都需要添加上控制信息(源目IP、源目MAC
- 应为分组是同步传输的,所以可能出现失序、丢失或重复的分组。
数据链路层
数据链路--->指网络中两个节点之间的逻辑通道。用于实现控制数据传输的硬件和软件加载到物理链路上,从而形成一种
数据链路。
封装成帧--->数据链路层将上层数据的分组信息,以数据帧的格式进行传输
数据帧长度=数据长度+首部长度+尾部长度
帧定界--->帧首部和尾部包含的控制信息,其中有一部分信息代表的含义是数据帧的开始和结束
最大传输单元(MTU):为了提高数据帧的传输效率,是的数据帧中的数据部分大小尽可能的大于首部和尾部的长度,但该数
值不能过大。(以太网环境下默认1500字节
数据帧的编码---> ·零比特填充的首位标志法
·违规编码法
·曼彻斯特编码
介质访问控制
- MAC子层---介质访问控制---负责控制和连接物理层的硬件
- 共享介质
- 多个设备共享一个通信介质的网络模式
- 半双工模式
- 共享介质
1.按通信方向分类,通信可分为单工,半双工,全双工
2.单工通信是指设备与设备之间的通信是单向的,并且方向固定,比如设备1只能发送数据给设备2,半双工指的是设备与设备间既可以发送也可以接收(但是不能同时进行),全双工指既可以发送又可以接收并且可以同时进行
- 访问控制:通过一种机制来控制那个设备可以使用通信介质
- 争用方式--->载波侦听多路访问(CSMA)
- 网络中的每个站点,采用先到先得的方式占用信道
- 以太网中使用的是CSMA/CD机制
- 令牌传递方式
- 应用在一个物理星型拓扑或逻辑环形拓扑中,通过令牌的方式来传输数据
- 令牌:一个特殊的数据帧
- 应用在一个物理星型拓扑或逻辑环形拓扑中,通过令牌的方式来传输数据
- 争用方式--->载波侦听多路访问(CSMA)
- 非共享介质
- 每个站点直连交换机,由交换机负责转发数据帧的模式
- 以太网组网方式,使用全双工通信
- LLC子层---逻辑链路控制---负责为逻辑链路提供服务的
网络层
逻辑寻址--->尽最大的努力交付数据服务。
路由器-->网络互联和路由选择
- 路由选择---确定路径
- 按照复杂的路由算法完成
- 分组转发---对分组所采取的动作
- 路由器根据转发信息表,将用户的数据从合适的端口发送出去。
- 转发信息表:FIB表单---是通过路由表RIB递归出来的

- 路由器根据转发信息表,将用户的数据从合适的端口发送出去。
DHCP协议:动态主机配置协议
是典型的C/S架构协议,C/S架构为客户端/服务端,谁先发送数据谁就是客户端。

- Discover报文---广播
- 传输层用UDP封装。源端口68;目标端口67
- 网络层使用IP协议。源IP:0.0.0.0;目标IP:255.255.255.255(全1代表广播
- 数据链路层使用以太网协议封装。源MAC:pc发送本数据的网卡的MAC 地址;目标MAC:全F
- Offer报文---单播
- 服务器收到discover报文后,首先解封装,然后判断本地是否还有待分配的IP地址,如果存在,则回复offer报文,若不
存在则不回复
- 应用层:携带了待分配的IP地址(68.85.2.101)、掩码、网关等相关信息
- 源端口:67;目标端口:68
- 源IP:68.85.2.1;目标IP:68.85.2.101
- 源MAC:路由器;目标MAC:PC
- Resquest报文---广播
- 会携带要申请的IP地址(68.85.2.101)
- 源端口:68;目标端口:67
- 源IP:0.0.0.0;目标IP:255.255.255.255
- 源MAC:PC;目标MAC:全F
- Ack报文---单播
- 源端口:67;目标端口:68
- 源IP:68.85.2.1;目标IP:68.85.2.101
- 源MAC:路由器;目标MAC:PC
PC在获取到IP地址后,会连续发送三次免费ARP报文,用来探测网络中是否存在IP地址冲突。如果 收到ARP回复,则认为网
络中存在该IP地址的使用者。此时,PC向DHCP服务器发送DHCP错误报告,告 知服务器,出现错误。服务器发送ICMP报文来ping这个IP地址,如果能够通讯,则服务器将该IP地址从 本地地址池中删除。
交换机的转发原理
交换机收到电信号后,将电信号转换成二进制。之后哦,截取数据帧。先看数据帧中的MAC地址,之后将该地址与数据进入接
口的对应关系记录在本地的MAC 地址表中。MAC地址表中的每一个表项老化时间为300s
之后查看目的MAC地址,将改地址与本地MAC地址表进行对比,如果存在对应表项,则按表项指示,进行单独数据转发。如
果没有对应表项,则进行洪范操作
洪范--->交换机会将数据从除了进入的接口以外的所有接口发送一遍
交换机数据帧的传输方式
- 直通转发
- 交换设备只读取数据帧最前方的14个字节。就可以把数据发送出去
- 碎片隔离
- 会读取数据帧的前64个字节
- 存储转发
- 设备读取数据帧的所有内容再转发
正常浏览器搜索是在地址中输入URL信息、域名。
URL--->资源定位符
URL=协议+主机+端口+文件名+路径
域名=主机名
DNS协议
为了减少用户访问复杂度,将IP地址对应转换为一个个域名信息,而DNS协议是在网络上通过域名解析出对应的IP地址的一个
协议。
DNS服务使用的是UDP/TCP的53号端口传输数据
在终端请求解析IP地址的过程中,使用的是UDP协议进行数据传输
DNS服务在进行区域传输是,使用TCP协议进行,一般是属于服务器与服务器之间交互时
DNS服务的查询方式
- 递归查询---每次请求的发起者在发生变化
- 迭代查询---每次请求发起者都是自身,但是每次都会从对端得到部分信息
跨广播域通信---依靠路由器转发
通广播域通信---依靠交换机转发
路由器转发原理
路由器基于数据包中的IP地址,查询本地路由表。若表中存在记录项,则无条件按照记录转发。
若没有记录,则直接丢弃该数据报文
前提是,该报文的目的MAC 地址是路由器本身
获取位置路由信息
- 直连路由:路由器默认生成可用接口直连网段的路由条目
- 接口双up
- 物理层
- 协议层
- 接口必须配置IP地址
- 接口双up
- 静态路由:网络管理员手工配置的
- 动态路由:通过运行某种算法计算得出的
TCP协议
TCP---传输控制协议
是一种面向链接的可靠传输协议
面向连接:指数据传输之前,收发双方需要先建立一条逻辑通路。
无面向连接:指的是数据可以自由传输,无需建立逻辑通路。
TCP是在不可靠的IP层之上,实现可靠的数据传输能力。数据有序、无丢失、不重复
- TCP提供全双工通信
- 发送缓存
- 存放发送应用程序传输给发送方TCP准备发送的数据。
- 存放TCP已发送但是尚未收到确认的数据。
- 接收缓存
- 不按序到达的数据
- 按序到达,但未被应用程序接收的数据
- 发送缓存
- TCP是面向字节流的。

四元组:源IP、源端口、目标IP、目标端口。 四元组用来建立一个完整的TCP连接
套接字:IP+端口
TCP报文段

TCP既可以运载数据,又可以用来建立连接、释放连接和应答。
TCP首部信息最短20字节
序列号:可以理解为字节流的编号,每发送一个字节的数据,序列号+1
确认序列号:是收到的报文的序列号+收到的数据部分字节大小
确认机制:每收到一个发送方发出的数据都需要回复一个确认报文
- 表明接收方期望收到发送方发送的下一个字节的序号
- 代表接收方已经收到了确认序列号之前的所有字节数据
累计确认
数据偏移:TCP报文段的数据起始处距离TCP报文段的起始处的距离。本质是在描述TCP首部大小
紧急指针:与控制位中的URG字段共同使用,当URG=1时,紧急指针有效。
紧急数据会被TCP放置在数据部分的最前方,即从第0个字节开始,而紧急指针是为了表明紧急数据的结束位置。
例如:紧急指针为70,则紧急数据位置为0字节到69字节
选项字段:最大报文段长度MSS;窗口扩大因子;时间戳;选择确认机制
标志位:
- 紧急位URG:报文段中包含紧急数据,是最高优先级的数据,应尽快传输,不在缓存队列中排队
- 确认位ACK:当确认位置为1,则确认序列号有意义。在连接之后所有传输的报文段都必须把ACK置为1
- 推送位PSH:接收方应尽快将数据交付给应用程序,不再等待缓存填满再向上提交
- 复位RST:表明TCP连接中出现错误,必须释放连接,然后重新建立连接
- 同部位SYN:表明这是一个连接请求报文
- 终止位FIN:表明发送方数据已完全发送,要求释放连接
TCP可靠性
确认、重传、排序、流控
排序机制
最大字节数由MSS(最大报文段长度)控制。该参数是需要在TCP握手过程中,通过前两次SYN 报文来进行参数协商。
如果双方的MSS数值不同,则选择数值较小的作为传输标准
MSS受到MTU的限制
MTU:最大数据传输单元,指的是数据链路层在封装成帧是所允许携带的最大数据量,在以太网中,MTU数值为1500字节
MSS:数据段中携带的数据字节数
MSS===MTU-IP首部-TCP首部
分片:这个操作是由网络层的IP协议来执行。
分段:这个操作是由传输层的TCP协议来执行。
PMTU---路径MTU
在IP报头中,有一个DF字段,该字段表明了IP报文是否允许被分片,PMTU功能卡气候,该字段为1,标识不能分片。此时当
需要进行分片时,发现该报文无法分片,设备会丢弃该报文,并向发送源回复一个ICMP报文(数据不可达),同时携带上当前设备的MTU。
发送方接受该ICMP报文后,因为TCP重传机制,会重新发送一次数据,但是会根据最新的MTU来生成新的分段报文。
通过序列号字段,保证分段的有序性。将根据序列号的大小,将乱序的报文段进行重组。
确认机制
是TCP保障可靠性的核心点
TCP协议保证对方能够收到本段发送的数据段的方式,就是让对方回复一个确认报文段。这是确认机制的做法
确认报文是唯一一种不需要被确认的数据段信息。
重传机制
RTT/RTO
超时重传---当超过一定时间未收到确认报文,则触发重传机制
超时重传的判断时间一句RTT(往返时间)参数来判断。RTO被称为超时重传时间
RTT---指发送端将数据发出后,到他接收到对端反馈的确认报文之间的这段时间
RTO取值应略大于RTT,但也不能太大。RTT并非是固定数值,他是动态变化的数值。
超时间隔加倍机制。当连续多次未收到确认报文,设备会认为是网络拥塞过大,将重传时间加倍,因为如果按照原本的重传时
间发送报文,很可能造成网络拥塞的加剧。
快速重传机制
在TCP中,发送方可以通过接收方的反馈,在超时时间到达前,意识到数据包丢失的现象,并进行重传。这种情况一般出现在
接收端收到一个失序报文的情况下。
快速重传机制不是因为RTO时间到达而触发,这种重传机制是以数据包为驱动的一种重传机制
当接收方意识到自己所期望的报文段丢失,服务器不能调取失序报文,并且不能确认这些报文信息。
因为TCP协议无法直接发送一个否认确认报文(无法直接发送一个数据报文段,告诉对端自己哪个报文没有收到),所以,TCP
将采用冗余ACK的方式来完成缺失报文通告。
SACK机制---选择确认机制 TCP在可选项字段中,添加了一个变量。该变量中携带的就是自己已经收到的数据信息。 TCP的确认是累积确认机制,正确接收失序的报文段是不会被接收方逐个确认的。因此,发送方在 重传的时候,需要将冗余ACK报文及之后的报文段都重新发送一遍。----导致资源浪费。 选择确认机制,不是所有运行TCP协议的设备都支持的。该机制会在TCP三次握手的前两次SYN报文 中进行协商。
TCP的流量控制机制
是属于TCP的传输效率问题。
滑动窗口
TCP头部中的“窗口值”是TCP实现流控的核心参数
窗口的大小是可以指定的,该参数的大小指的是无需等待确认应答,而可以继续发送数据包的最大量
窗口的大小,其实体现的就是接受缓存区的大小
TCP要求发送方一句对方的接收窗口(rwnd)来控制数据的发送量。最初,TCP的接收窗口===接收缓存区大小。接收窗口会随着时间的增长而动态变化


窗口关闭
窗口的大小是接收端根据自己的缓存空间的剩余量来决定的一个动态变化的数值,那么这个剩余量就有归0的可能性。也就代
表此时接收方所有缓存空间均已占用并且没能及时处理里面的资源
所以,当接受方反馈窗口值为0是,那其实就是在通知发送方不要再发送数据
该机制存在风险:接收方通过确认ACK报文来通知发送方自己的窗口大小,理论上如果接收方将自己的缓存数据清空后,将反馈一个窗口值非0的报文来通知对端,可以继续发送数据了。但是如果这个非0的ACK报文在重传过程中丢失---回引发风险,因为确认报文丢失不会触发重传机制。所以客户端依然处于窗口关闭状态,不会发送数据,在等待服务器的响应。而服务器也在等待客户端发送数据。此时两者进入死锁状态
解决方式:客户端周期性发送窗口探测报文,该报文只包含TCP首部信息。通过触发TCP确认机制,来让服务端发送确认报文,从而告知客户端,此时的窗口大小。打破死锁现象。
窗口大小仅仅是实现了将TCP数据传输的效率提高(不需要确认);但是并没有看到所谓的流量控 制,而真正的流量控制是由窗口关闭机制实现的。
窗口扩大因子
TCP选项字段中的窗口扩大因子,可以解决首部中窗口值过小的问题。因为首部中窗口值大小仅为 16bit,最大值为65536。
窗口扩大因子占据3字节大小。取值仅为0-14。是用来将TCP的窗口的值左移的位数,使得原本的窗 口值加倍。
窗口扩大因子,只能出现在同步报文段中,否则将被忽略。
TCP的拥塞控制机制
中间链路的处理能力--->拥塞控制机制
网络中对资源需求量超过了资源的可用量的情况,被称为拥塞
如果出现拥塞情况---->分组丢失--->重传--->网络拥塞加剧
流量控制是为了让接收方能来得及接受,而拥塞控制是为了降低整个网络的拥塞程度
- TCP如何判断此时网络环境拥塞
- TCP将连接中出现的丢包行为视为拥塞表现
- 一种是数据包确认超时
- 收到来自接收方发送的三个冗余ACK报文
- TCP将连接中出现的丢包行为视为拥塞表现
- TCP如何控制数据发送量
拥塞窗口--->跟接收窗口一样,都可以对发送的字节数大小进行限制
发送方发出未收到确认的报文的字节数,不许小于或等于拥塞窗口和接收窗口的最小值
拥塞窗口的数值是依靠TCP拥塞控制算法得出。TCP是在保证能够支持的最大传输效率的情况下来保证没有拥塞发生。被称为自
计时。--->通过收到的确认报文来增加拥塞窗口。
拥塞控制算法--->慢启动、拥塞避免,快速恢复
- 慢启动--->通常在开始传输数据时,拥塞窗口会被设置的很小,一般等于一个MSS数值。即一次只能发送一个数据报文段。
- 每收到一个新的ACK确认报文,就会增加一倍MSS的大小
- TCP会设定一个慢启动阈值来评判,评判是否要停止慢启动机制
- 当拥塞窗口<门限,继续使用慢启动算法
- 当拥塞窗口>门限,此时将慢启动算法切换为拥塞避免算法
- 当拥塞窗口=门限,二者均可使用
- 拥塞避免
- 在一个RTT(数据包往返)时间线内,拥塞窗口只增加一个MSS
- 拥塞避免算法,不是说直接避免拥塞,而是通过降低窗口的增大速率使得网络不容易出现拥塞
- 快速恢复
- 如果网络中没有发生拥塞,那么拥塞窗口就会无时无刻的增长下去
- 但是如果出现拥塞,那么这个增长必须停止

假设,最开始传输数据是,慢启动门限为16
- 通过慢启动算法,逐步增大窗口大小
- 当窗口大小≥门限值,则切换为拥塞避免算法
- 当网络中出现拥塞情况后,因为确认报文超时而判断的拥塞---->快重传
- 此时将慢启动门限值设定为上一次门限值的一般,此时为8
- 将窗口大小设定为1
- 此时重新启动慢启动算法,重复之前过程
- 如果拥塞是因为三次冗余ACK而判断---->快恢复
- 将慢启动门限值设定为上一次门限值的一般
- 将窗口大小设定为此时的门限值,直接开始使用拥塞避免散发进行扩大窗口
如何提高网络利用率:
延迟确认应答机制
收到数据以后不立即返回确认报文,而是延迟一段时间
- 在没有收到2*最大段长度(MSS)的数据为止,不做确认应答
- 其他情况,最大延迟0.5s发送确认应答
捎带应答机制
TCP的确认应答和回执数据可以通过一个数据包进行发送
延迟确认机制和捎带应答一般共同使用
TCP面向连接---连接管理
连接建立、数据传输、连接释放
TCP连接的建立
- TCP建立的双方都要知晓对方存在
- 要允许双方协议参数协商
- 设备可以为TCP连接分配相应资源(缓存空间)
TCP规定SYN被设置为1的报文段不能携带数据,但是要消耗一个序号

若第三次报文丢失,不会触发超时重传,因为第三次报文不需要获得对方确认报文。
Q1:初始序列号是什么产生的?为什么是随机值而不是固定值?
初始序列号--->ISN:初始序列号产生是通过源地址、目的地址、源端口、目的端口和一个随机因子通过哈希算法计算得出
的。后续又加入了时间因子。
出于安全性考虑,如果被知道了初始序列号,那么很容易可以构造出一个在对方窗口内的序列号。从而伪造出TCP报文,实现
会话劫持。
TCP序号绕回问题:
- 重复序号:当序号绕回后,之前已经使用过的序号可能会再次出现,导致节后发错误的将重复的报文段当做新的吧文段处理,从而丢弃正常的报文
- 延迟确认:因为延迟确认时收到一定数量的数据后才发送,而序号绕回会导致延迟确认的触发时间延后,从而降低数据传输的效率。
解决思路:使用时间戳选项来增加序号的有效范围
Q2:什么是时间戳?
TCP时间戳--->记录数据报文发送的时间,其中有两个字段,分别为发送方时间;回显时间。
- 发送方发送数据时,将本地时间记录在发送方时间中
- 接收方收到数据报文后,将收到的时间戳原封不动的返回给发送方,并在其中记录自己发送报文的时间
- 发送方收到回应报文后,根据报文中的回显时间字段来判断该报文是否是正确的报文,如果是,则根据该时间计算RTT数值,并计算RTO数值
时间戳是双向选择,需要在TCP连接建立阶段进行协商
Q3:是否可以用“两次握手报文”建立连接
采用三次握手形式,不是因为两次握手无法建立连接,而是为了防止已经失效的连接请求报文突然又传送到TCP服务端,从而导致服务端回复信息,建立连接,凭空消耗资源
Q4:三次握手如何阻止历史连接
当客户端发送连接建立请求报文后,因为网络阻塞,导致客户端重新发送一个链接请求建立报文,这两个报文的序列号不同(因为为初始序列号)
当网络阻塞减小时,可能旧的报文先到达服务端,而导致服务端回复SYW+ACK报文。此时服务端出于同步已接收状态(SYN-RCVD),但此时对客户端而言,服务端回复的报文是错误的报文,因为其确认序列号与客户端将要发送的报文序列号不匹配,则客户端发送RST报文,断开连接。
当连接断开,服务端恢复到侦听状态,此时客户端发送的第二个连接请求报文到达。之后正常建立TCP连接
如果是两次握手,那么服务端在收到旧的SYN报文后,会直接进入到连接已建立状态。在该状态意味着已经可以发送数据,可能会存在数据传输。但是又因为此时的连接对于客户端而言是错误的,所以此时服务端传输的数据客户端不会接收。
Q5:如果已经建立了连接,但是客户端突然故障怎么办?
TCP设计了一个保活计时器
如果客户端出现故障,服务端不能一直等待下去,因为会白白浪费资源
服务端每收到一次客户端的请求后都会复位保活计时器,一般为2h,当保活器为0时,服务端主动发送探测报文,并每隔75s发送一次。如果连续十次报文都没有收到对端回复,则服务端认为客户端出现故障,关闭连接。
ps:如果A与B之间能ping通,不能保证AB之间能建立TCP
Q6:如果一个TCP链接存在两个客户端,是否可以正常链接?

四次挥手---TCP连接断开
Time-Wait状态:客户端的倒数第二个状态
在等待2MSL时间后,客户端切换状态,进入关闭状态。MSL是最长报文寿命(默认为2min)

讲解TCP完整工作过程,建立连接使用C/S架构,断开连接是双方同时断开。(客户端2000字节数据服务端1000字节数据。一次报文携带1000字节:
1. TCP连接的建立

TCP连接的建立过程使用“三次握手”(Three-way Handshake)机制,确保双方的接收和发送能力正常,连接是可靠的。假设我们的客户端
(Client)要与服务端(Server)建立连接,以下是详细的步骤:
1.1 第一步:客户端发送SYN
1.客户端发送SYN包:客户端生成一个SYN(Synchronize)包,表示希望建立连接。该包包含一个初始序列号(ISN),比如设为ISN_C。
2.发送SYN包:客户端将SYN包发送给服务器。此时,连接状态为SYN_SENT。
1.2 第二步:服务端响应SYN-ACK
3.服务端接收SYN包:服务端收到SYN包后,准备建立连接。
4.服务端发送SYN-ACK包:服务端生成一个SYN-ACK包,确认收到客户端的SYN包。此包中包含服务端的初始序列号(ISN),设为ISN_S,并
确认号设置为ISN_C + 1,表示确认收到客户端的SYN包。
5.发送SYN-ACK包:服务端将SYN-ACK包发送回客户端。此时,连接状态为SYN_RCVD。
1.3 第三步:客户端发送ACK
6.客户端接收SYN-ACK包:客户端收到SYN-ACK包,确认服务端的序列号。
7.客户端发送ACK包:客户端生成一个ACK包,确认号设置为ISN_S + 1,表示确认收到服务端的SYN-ACK包。
8.发送ACK包:客户端将ACK包发送到服务端。此时,连接状态变为ESTABLISHED。
1.4 连接建立成功
在完成三次握手后,客户端和服务端之间的TCP连接建立成功,双方都处于ESTABLISHED状态,可以进行数据传输。
2. 数据的传输
在建立连接后,客户端和服务端可以开始数据的传输。假设客户端需要发送2000字节的数据,而服务端只能接收1000字节的数据。以下是
数据传输的详细过程:
2.1 客户端数据分片

9.数据分片:客户端的数据需要分片为多个TCP段(Segment)。由于每个TCP段的最大传输单元(MTU)为1000字节,因此客户端需要将
2000字节的数据分为两个TCP段:
10.第一个段:前1000字节
11.第二个段:后1000字节
2.2 服务端接收数据
12.接收第一个TCP段:服务端首先接收第一个1000字节的数据段,并将其存储在接收缓冲区。
13.发送ACK确认:服务端接收完第一个数据段后,会发送一个ACK包,确认号设置为ISN_C + 1001(表示已经接收到1000字节的数据)。
14.接收第二个TCP段:服务端随后接收第二个1000字节的数据段,并再次更新接收缓冲区。
15.发送ACK确认:服务端接收完第二个数据段后,会发送另一个ACK包,确认号设置为ISN_C + 2001。
3. 连接的断开

连接的断开过程称为“四次挥手”(Four-way Handshake),用于确保双方都能安全地终止连接。以下是断开连接的详细步骤:
3.1 第一步:客户端发送FIN
16.客户端发送FIN包:当客户端完成数据发送后,它会发送一个FIN(Finish)包,表示它要关闭连接。
17.发送FIN包:此时,连接状态变为FIN_WAIT_1。
3.2 第二步:服务端响应ACK
18.服务端接收FIN包:服务端收到FIN包后,确认客户端希望关闭连接。
19.发送ACK确认:服务端会发送ACK包,确认号设置为ISN_C + 1,表示确认收到客户端的FIN包。
3.3 第三步:服务端发送FIN
20.服务端准备关闭连接:服务端在处理完所有未完成的数据后,发送一个FIN包,表示它也要关闭连接。
21.发送FIN包:此时,服务端的连接状态变为LAST_ACK。
3.4 第四步:客户端响应ACK
22.客户端接收FIN包:客户端收到服务端的FIN包,确认服务端也要关闭连接。
23.发送ACK确认:客户端发送ACK包,确认号设置为ISN_S + 1,表示确认收到服务端的FIN包。此时,客户端的连接状态变为TIME_WAIT。
24.最终关闭连接:在等待一段时间后,客户端最终关闭连接,状态变为CLOSED。

1387

被折叠的 条评论
为什么被折叠?



