增补博客 第二十九篇 计算机网络复习四

news/2024/10/1 21:24:05

第五章 运输层

1.运输层的作用

运输层向它上面的应用层提供通信服务(提供端到端,进程到进程的可靠通信),为运行在不同host上的进程提供逻辑通信,向高层用户屏蔽通信子网的细节

2.UDP和TCP的特点,及使用它们的应用程序,熟知端口号

UDP和TCP的特点:

  • UDP

    • 支持单播、多播、广播

    • 无连接,不可靠

    • 可以任何速率发送数据

  • TCP

    • 仅单播,不支持多播、广播

    • 面向连接,可靠按序

    • 流量控制(发送速率不超过接收方的接收能力)

    • 拥塞控制(网络过载时限制发送方的发送速率)

及使用它们的应用程序:

熟知端口号

3.UDP:首部格式,检验和

首部格式

检验和发送端:

  1. 先设置检验和字段为0

  2. 每两个字节为一组,进位累加求和,多出的加到最后一位

  3. 把求和结果求反,求反即转换成2进制后,0变1,1变0

  4. 把计算结果放入检验和字段

接收端

  1. 把每2个字节为一组,进位累加求和

  2. 把求和结果求反:为0即未检验出差错(不排除没检测出来的错误)

4.TCP的首部格式(端口号,序号,确认号,窗口,首部长度,检验和,6个标志位)

 

端口号:各占2个字节当访问百度时,源端口使用客户端系统随机分配的端口号,目的端口是使用熟知端口号80序号:占4个字节。序号范围是【0~2^32-1】,循环使用确认号:占4个字节,是期望收到对方下一个报文段的第一个数据字节的序号。若确认号为N,则代表:序号N-1为止的所有数据都已正确收到窗口:占2个字节。窗口值是【0~2^16-1】之间的整数。窗口指的是发送本报文段的一方的接收窗口。窗口值告诉对方:从本报文段首部中的确认号算起,接收方目前允许对方发送的数据量。窗口值作为接收方让发送方设置其发送窗口的依据。窗口字段明确指出了现在允许对方发送的数据量。窗口值经常在动态变化着首部长度:占4位,也叫数据偏移,最小20,最大60检验和:占2位,检验和字段检验的范围包括首部和数据两部分6个标志位

  • 紧急URG:当URG=1时,表明紧急指针字段有效。紧急指针:指出在本报文段中紧急数据共有多少个字节(紧急数据放在本报文段数据的最前面)

  • 确认ACK:只有当ACK=1时确认号字段才有效

  • 推送PSH:接收方TCP收到PSH=1的报文段,就尽快地交付接收应用进程,而不再等到整个缓存都填满了后再向上交付

  • 复位RST:当RST=1时,表明TCP连接中出现严重差错,重新建立运输连接

  • 同步SYN:同步SYN=1表示这是一个连接请求或连接接受报文

  • 终止FIN:FIN=1表明发送端的数据已发送完毕,并要求释放运输连接

5.TCP的可靠传输:超时重传机制,TCP流量控制(序号,确认号,确认标志位,窗口,死锁问题与持续计时器),发送缓存和接受缓存的作用,捎带确认与累积确认

超时重传机制超时计时器时间RTO:RTO=RTTs+4*RTTD测量多个sampleRTT求平均值,形成RTT的估计值RTTs:RTTs=(1-α) * RTTS+α * SampleRTT 典型值α=1/8测量RTT的变化值:RTTs与SampleRTT的差值:RTTd=(1-β) * RTTD+β * |RTTs-SampleRTT| 典型值:β=1/4TCP流量控制(序号,确认号,确认标志位,窗口,死锁问题与持续计时器)

  • 序号:发送窗口里面的序号表示允许发送的序号

  • 确认号:表明主机期望收到的下一个序号,而上一个序号位置的数据已经收到了

  • 确认标志位:

  • 窗口:窗口指的是发送本报文段的一方的接收窗口;发送窗口表示:在没有收到B的确认的情况下,A可以连续把窗口内的数据都发送出去。

  • 死锁问题:发送方等待接收方通知窗口大小,接收方等待发送方发送数据

  • 持续计时器:当发送方收到接收方的零窗口通知,启动持续计时器。若持续计时器到期,就发送一个零窗口探测报文段

  • 接收方发送的确认报文段中:若窗口仍是零,则重置持续计时器若窗口不是零,则死锁打开发送缓存和接受缓存的作用

  • 发送方应用进程把数据发送到TCP的发送缓存;发送缓存暂时存放:1准备发送的数据;2已发送未确定的数据

  • 接收方应用进程从TCP的接收缓存中读取字节流;接收缓存暂时存放:1已收到但尚未提交的数据;2失序的数据捎带确认与累积确认

  • 累积确认:即不必对收到的分组逐个发送确认,而是对按序到达的最后一个分组发送确认,这样就表示:到这个分组位置的所有分组都已正确收到了

  • 捎带确认:当一个数据帧到达的时候后,接收方并不是立即发送一个单独的控制帧,而是抑制一下自己并且开始等待,知道网络层传递给他下一个分组,然后,确认信息被附在往外发送的数据帧中(使用帧头中的ack域)。实际上,确认报文搭了下一个外发数据帧的便车。

6.TCP的拥塞控制:网络拥塞的判断,传输轮次与拥塞窗口大小的关系(慢开始与拥塞避免,门限ssthresh,重传计时器超时与三个重复ACK)

网络拥塞的判断:重传定时器超时传输轮次与拥塞窗口大小的关系(慢开始与拥塞避免,门限ssthresh,重传计时器超时与三个重复ACK)

  • 慢开始:每经过一个RTT,cwnd翻倍

  • 拥塞避免:每经过一个RTT,cwnd加一

  • 慢开始门限ssthresh:当cwnd = ssthresh时由指数增长切换为线性增长;ssthresh=24时,重传计时器超时,发送方判断为网络拥塞。调整ssthresh=cwnd/2,拥塞窗口cwnd=1,执行慢开始图片

7.TCP连接:TCP的套接字,三次握手建立TCP连接,四次握手释放TCP连接

TCP的套接字:就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制三次握手建立TCP连接:

  • 刚开始客户端A和服务端B都是关闭的

  • B的TCP服务器进程被动打开,准备接受客户进程的连接请求

  • A主动打开,A向B发出SYN报文段,选择初始序号,不携带数据。SYN=1,SEQ=X

  • B收到SYN报文段,发回ACK报文段,选择初始序号,分配缓存,不携带数据。SYN=1.ACK=1.SEQ=Y,ack=x+1

  • A向B发送SYN+ACK报文段,可携带数据。通知上层应用进程:TCP连接已建立。

  • B通知其上层应用进程TCP连接已经建立。

四次握手释放TCP连接:

  • 客户端A主动关闭。A向B发出FIN报文段,并停止发送是数据。FIN=1,seq=u

  • B通知应用进程。B收到FIN报文段,回复ACK报文段。TCP连接处于半关闭状态:B仍可发送数据。ACK=1,seq=v,ack=u+1

  • B被动关闭。若B已经没有要向A发送的数据,向A发送FIN报文段。FIN=1,ACK=1,seq=w,ack=u+1

  • A收到FIN报文段后,必须发出ACK报文段。ACK=1,seq=u+1,ack=w+1

  • B收到ACK报文段后,TCP连接关闭。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/44958.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

LeetCode 633 Sum of Square Numbers All In One

LeetCode 633 Sum of Square Numbers All In One 633. Sum of Square Numbers Math.sqrt Math.trunc Math.powLeetCode 633 Sum of Square Numbers All In OneSum of Square NumberssolutionsMath.sqrt / 平方根function judgeSquareSum(c: number): boolean {let max = Math.t…

又跳槽!3年Java经验收割成都大厂的面试心得(干货满满文末有福利)

中厂->阿里->字节,成都->杭州->成都 系列文章目录和关于我 0.前言 笔者在不足两年经验的时候从成都一家金融科技中厂跳槽到杭州阿里淘天集团,又于今年5月份从杭州淘天跳槽到成都字节。自认为自己在面试这方面有一点心得,处于记录和分享的目的便有了此文,此文纯…

leetcode 206. 反转链表

题目描述 206. 反转链表给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。示例 1:输入:head = [1,2,3,4,5] 输出:[5,4,3,2,1]示例 2:输入:head = [1,2] 输出:[2,1]示例 3: 输入:head = [] 输出:[] 提示:链表中节点的数目范围是 [0, 5000],-5000 <= …

AgileConfig-1.9.4 发布,支持 OpenTelemetry

Hello 大家好,最新版的 AgileConfig 1.9.4 发布了。现在它可以通过 OpenTelemetry 对外提供 logs,traces,metrics 三个维度的数据。用户可以自由选择支持 otlp 协议的工具来进行查询与分析。比如 Seq,loki,prometheus, grafana 等等。 本来 AgileConfig 的日志是通过 Nlog…

实验七

TASK1点击查看代码 // 将图书信息写入文本文件data1.txt // 再从文件中读取图书信息,打印输出到屏幕上,并显示行号#include <stdio.h>#define N 80 #define M 100typedef struct {char name[N]; // 书名 char author[N]; // 作者 } Book;// 函数声明 void func1(); …

LLM大模型: DPO原理和源码解析

1、前段时间国外某大学反向抄袭国内某团队的大模型闹得沸沸扬扬,国内被抄袭的大模型是MiniCPM,详细资料:https://github.com/OpenBMB/MiniCPM ; 能被国外同行抄袭,必定有过人之处,粗略看了一下https://github.com/OpenBMB/MiniCPM/blob/main/model/modeling_minicpm.py 模…

[转]ECS在游戏后端开发的应用

以下转自知乎南盼:https://zhuanlan.zhihu.com/p/559776142ECS作为一种经典的GamePlay架构,凭借与oop截然不同的数据和逻辑分离的架构设计,使其在游戏客户端领域拥有诸多独有优势,深受很多客户端开发同学的推崇。本文从后端开发的视角出发,期望能借鉴ECS的思想来解决游戏后…