计算机网络的基础知识

embedded/2024/9/23 3:30:32/

tcp叫段,udp叫报,ip叫包,链路层叫帧。
我们在网线中跑的就是帧。
tcp段和udp报没有长度限制,只有在ip层和链路层才有包和帧的最大限制。
一个tcp段,在tcp缓存区中被封装,然后传到ip层进行拆分和封装,然后到链路层进行拆分和封装,然后传出发送终端,之后在电路中就是以数据帧的形式进行传输的,当进入不同的链路层子网中时,会修改链路层协议的头。只有到达接收终端后,计算机才会将帧进行组装。
数据帧在在子网中,通过arp协议的网关ip将帧发送到网关进入公网,公网可能会进行nat转换,在公网中通过ip进行路由,当进入目的子网网关后,通过MAC地址和arp协议路由到目的终端。
网络层是终端之间的通信,而运输层是端口之间的通信(进程通信)。
ip协议是不可靠服务,udp也是不可靠协议,不能保障能将数据完整地全部地发送到目的端口。
tcp通过流量控制,序号,确认,定时器保障了有序正确地将数据发送给接收人。tcp还提供了拥塞控制,udp流量是不可调控的。
socket在应用层和运输层之间,connect是第一次握手,accept是第二次握手,发送者回复的ack是第三次握手。
udp只在ip上面加了目的端口,源端口和一个验证字段和长度,程序员几乎就是在和ip协议打交道。dns是使用udp的一个例子。

CP采用三次握手的过程可以确保连接的可靠性和稳定性,防止过期连接的建立,并有效避免连接建立的混乱情况。
防止过期连接的建立:
如果服务端在一定时间内没有收到客户端的确认,那么服务端会超时关闭这个连接请求,避免了过期连接的建立。就是关闭了这个建立的socket
如果客户端在一定时间内没有收到服务端的确认,那么客户端会重传 SYN 包,直到收到服务端的确认或达到最大重传次数。
tcp是全双工的,所以需要两者都确认关闭,所以是四次挥手:
一方发送 FIN 标志的数据包给对方,表示自己不再发送数据,但仍然可以接收数据(第一次挥手)。

ip是尽力而为的交付服务,也是不可靠服务。
udp也是不可靠服务,没有ack,不能保障消息到达。
tcp通过使用流量控制,序号,确认和定时器,保障了有序到达,是可靠服务。tcp还提供了拥塞控制,通过调节发送端发送进网络的流量速率来做到。
一个进程可能有多个套接字,但是一个端口只能由一个tcpsocket监听,一个udpsocket监听。
udp的内容包含:
源端口:目的端口
长度 :检验和
剩下的就是报文了

停等协议

发送方只维持一个帧窗口,发送完在接收响应前阻塞等待,接收方验证成功返回ack,验证失败返回nak。

GoBackN协议(GBN)

流水线:通过给报文添加序号,像流水线一样通过网口发出报文。
定时器:报文超时重发。
累计确认:接收方接收到多个报文后,发送一个已经接收到的顺序报文的最大ack。
窗口:发送方维持一个窗口,接收方只维持一个窗口用来接收上一个返回的ack报文。所以不会缓存接收到的ack以后的报文。
重传(返回ack):因为接收方只维持了一个端口,所以如果下一个收到的不是ack的,那么流水线中跑的那些报文不会接收,返回窗口的ack,需要全部重传。

选择重传(SR)

窗口:发送方和接收方都维持窗口,即都有缓存报文。
返回ack:发送方接收到ack就会移动到ack的地方(因为累计ack),如果接收方接收到了窗口右侧的报文而没有收到左侧的报文,就会返回最小左侧窗口的ack。

TCP使用了选择重传协议

TCP是全双工的可靠服务。
TCP有发送缓存和接收缓存。
TCP报文段结构:
在这里插入图片描述
MSS:MSS的选择一般要考虑到MTU,以避免IP分片,MSS主要用于在TCP连接建立时进行协商,通常是在TCP的三次握手过程中通过TCP选项字段进行交换。选出两者小的MSS。
16位窗口大小:用于流量控制。
标志位:

序号(seq)

报文段的序号是按照字节排序的,比如发送0-2000,MSS是500,那么第一个报文就是0-499,seq=0.

确认号(ack)

0-499的ack响应报文的ack=500.即下一个请求的起始字节。

累计确认,捎带确认

超时重传

流量控制

TCP通过让发送方维护一个接收窗口的变量来实现流量控制,接收窗口是由接收方给发送方的ack中携带的,表示该接收方还有多少字节的接收缓存空间。
连接双方作为发送端,都需要维持一个接收窗口(rwnd)。
当发送方的接收窗口变量为0时,说明接收方没有缓存空间了,发送方会发送只有一字节的报文段,直到返回的ack的rwnd不为0.

进程从udp的缓存中读取数据如果不够快,满了就会溢出,就会丢弃报文段。

三次握手

  1. 客户端connect,发送的报文段不包含应用层数据,SYN置1,seq=客户端随机序号。
  2. 服务器accept接收到请求,为客户端建立缓存和变量,返回SYN=1,ack=客户端随机序号+1,seq=服务器的随机序号。
  3. 客户端收到SYN后,给连接分配缓存和变量,返回ack,可以携带应用层数据。

四次挥手

FIN-ACK,FIN-ACK.
FIN代表不发送了。

拥塞控制

TCP的拥塞控制是为了确保网络中的流量不会超出网络的容量,从而避免网络拥塞导致的数据丢失。
tcp如何判断路线发送了拥塞?

  • 超时或者三次冗余就减速。(三次冗余:如果发送端连续发送相同的数据包并且等待确认的次数达到三次)
  • 一个确认的ack会给发送加速。

如何调整发送速率?
通过调整窗口(cwnd)的数量。(每个报文段中的16位的rwnd,是用来流量控制的,取决于接收方还有的缓存空间;而拥塞控制的窗口是滑动窗口的数量)
发送方的未确认的数据量不会超过cwnd和rwnd。

慢启动

cwnd一开始为一个MSS,然后收到一个ack就2的指数增长。

拥塞避免

当发送方有一个超时后,意味着拥塞,会重新慢启动,但是达到发生拥塞的cwnd/2时,进入拥塞避免阶段,以cwnd线性增长。
在这里插入图片描述

快速恢复(加性增,除性减)

当发送方有一个三次相同的ack(冗余ack)时,cwnd/2,然后线性增长。

在这里插入图片描述


http://www.ppmy.cn/embedded/13108.html

相关文章

行业早报4.24

1.哪吒汽车母公司合众汽车获至少 50 亿元投资,将尽快实现 IPO 上市; 2.消息称抖音生活服务一季度销售额超 1000 亿,但未缩小与美团差距; 3.华晨宝马 2023 年国内销量约 71 万辆,同比增长 6.8%,3 系成主力车…

x264 编码器亚像素处理流程

H264编码标准中为什么需要亚像素数据 在H.264中,为了提高运动估计的精度,除了在整像素级别上进行搜索外,还会在亚像素级别(如1/2像素和1/4像素)上进行搜索,以找到最佳匹配块。在进行亚像素估计时,需要对非整数像素点进行插值计算。H.264标准中定义了多种插值方法,如六抽…

第七届蓝桥杯 c/c++ B组

标题:第几天 2000年的1月1日,是那一年的第1天。 那么,2000年的5月4日,是那一年的第几天? 注意:需要提交的是一个整数,不要填写任何多余内容。 125 直接查看电脑日历去数或者excal拉即可 标题…

【1431】java学习网站系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java 学习网站系统是一套完善的java web信息管理系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql5.0&…

多轴机械臂/正逆解/轨迹规划/机器人运动学/Matlab/DH法 学习记录03——机械臂运动学逆解

系列文章目录 本科毕设正在做多轴机械臂相关的内容,这里是一个学习机械臂运动学课程的相关记录。 如有任何问题,可发邮件至layraliufoxmail.com问询。 1. 数学基础 2. 机械臂几何法与DH表示法 3. 机械臂运动学逆解 文章目录 系列文章目录一、引言1.手臂…

【算法模板】图论基础算法

文章目录 图论算法基础模板树与图的存储1. 邻接矩阵:2. 邻接表: 树与图的遍历(1)深度优先搜索 (DFS)深度优先遍历 (DFS)(2)宽度优先搜索 (BFS)宽度优先遍历 (BFS) 拓扑排序朴素Dijkstra算法堆优化版Dijkstra算法Bellman-Ford算法SPFA算法SPFA判断图中是否…

Rust入门-所有权

一、为什么、是什么、怎么用 1、为什么Rust要提出一个所有权和借用的概念 所有的程序都必须和计算机内存打交道,如何从内存中申请空间来存放程序的运行内容,如何在不需要的时候释放这些空间,成为所有编程语言设计的难点之一。 主要分为三种…

深度神经网络(DNN)

通过5个条件判定一件事情是否会发生,5个条件对这件事情是否发生的影响力不同,计算每个条件对这件事情发生的影响力多大,写一个深度神经网络(DNN)模型程序,最后打印5个条件分别的影响力。 示例 在深度神经网络&#xf…