计网-传输层个人笔记

传输层

主机与主机的通信实质上是进程与进程之间的通信。
在这里插入图片描述
传输层只有主机才有的层次,中间的结点都只有三层。

  1. 网络层是为主机到主机的通信提供服务,但是再实际情况中,数据如果只是到达主机,并没有通信结束,只有把数据传递给某一个具体的进程或者进程中的线程时,才能勾完全通信的过程,所以不仅是网络层还需要传输层

  2. 复用:发送时,将不同进程的数据(报文段)使用传输层同一协议进行传输。
    分用:接受时,将链路上同一协议发送的数据分开传送给不同的进程。
    复用与分用类似寄信的过程。

  3. 传输层对收到的报文段进行差错检测,因为网络层的IP数据报首部检验和只检测了首部,传输层检测数据部分。

在这里插入图片描述
在这里插入图片描述
传输层的寻址与端口
在网络层和链路层,数据的传输只需要先通过IP地址找到主机的所处的网络,当数据传入网络后,再根据MAC地址定位到具体那一台主机,而对将主机上具体进程的定位就是端口。
在这里插入图片描述
在这里插入图片描述
套接字标识一个端点,即发送的终点。
在这里插入图片描述

1、(用户数据报)UDP协议

相比于TCP不严格,不建立连接。
UDP面向报文:即UDP会将应用层的报文完整的进行封装为传输层的UDP数据报,而再下一层网络层封装为IP数据报,但是在传输时会进行分组,这样在路由器上进行传输时可能会造成丢失。因此应用层的报文必须适量。
UDP无法保证可靠传输,当传输层采用UDP协议时,需要网络层来进行可靠传输。
在这里插入图片描述
UDP首部格式:
在这里插入图片描述
UDP校验过程:
在这里插入图片描述
在这里插入图片描述

2、TCP协议

应用程序在通信之前,必须先建立TCP连接,通信完成后释放掉,而只是逻辑上的连接,不同于数据从上至下封装再上链路传输的的物理连接,因此时虚连接。
TCP提供全双工通信,主要包含发送缓存和接收缓存两个类似队列的缓存。
在这里插入图片描述

填充的作用是让首部保持4B的整数倍20B。
在这里插入图片描述
确认号:每个分组的第一个字节的序号。
TCP虽然面向字节流,但是会将很多字节总成报文段进行发送。

在这里插入图片描述
TCP面向连接,每接收到一个分组就需要回复确认,同时确认号即确定下一个报文段的第一个字节序号,又证明来前面序号的数据已经正确接收。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

当接收方突然无法接收文件并通知发送方停止发送,发送方收到通知信息,并利用命令(紧急数据)来停止发送,而命令会进入数据部分TCP缓存当中,紧急数据中URG = 1,优先级最高,便可以插报文段发送缓存的队并发送出去,告诉接收方我不发啦。
在这里插入图片描述
PSH相比较URG是改变的是接收端TCP缓存报文段的顺序,PSH = 1,将该报文段优先交付给应用层。
在这里插入图片描述
在这里插入图片描述
紧急指针报告了紧急数据的位置与字节数。
在这里插入图片描述

2.1 TCP连接管理

在这里插入图片描述
3次握手:

第一次:
客户端发送连接请求报文段,无应用层数据,此时,SYN = 1,表明这是请求报文/确认报文,seq即序号,随机生成x位。
第二次:
服务器端为该TCP连接分配缓存和变量,并向客户端返回确认报文段,允许连接,无应用层数据。
SYN = 1,ACK = 1,说明确认号有效,确认号ack = x+1
第三次:
客户端为该TCP连接分配缓存和变量,并向服务器端返回确认的确认,可以携带数据。
SYN=0,ACK=1,seq=x+1,ack=y+1

在这里插入图片描述
由于三次握手中客户端和服务器都位TCP连接分配缓存和变量,会导致黑客的洪泛攻击。

在这里插入图片描述
4次握手

1. 客户端发送连接释放报文段,停止发送数据,主动关闭TCP连接。
	FIN=1, seq=u
2. 服务器端回送一个确认报文段,客户到服务器这个方向的连接就释放了--半关闭状态。
	ACK=1,seq=v, ack=u+1  #半关闭即客户端虽然不再发送了,但是服务器还可以发送
3. 服务器端发完数据,就发出连接释放报文段,主动关闭TCP连接。
	FIN=1,ACK=1,seq=w,ack=u+1
4. 客户端回送一个确认报文段,再等到时间等待计时器设置的2MSL(最长报文段寿命)后,连接彻底关闭。
	ACK=1,seq=u+1,ack=w+1

在这里插入图片描述

2.2 TCP可靠传输

在这里插入图片描述
TCP虽然面向字节流,但是会将很多字节总成报文段进行发送。TCP缓存中一个字节占一个序号,接收时可按照顺序进行重排。而其实当第一个报文段分组传给TCP缓存后,即使接收端已经上传给应用层,发送端TCP缓存中的该报文段也是仍然还在的,主要是为了防止在发送过程的丢失,当没有收到接收方的确认报文段,发送方会进行重传,收到确认后才会从缓存中删除。
这里确认报文段也不一定就是单独发送的,也可以和其他报文段数据一起,捎带确认。
在这里插入图片描述
累计确认:这里如果78先到,456没到,那接收方的确认号还是4,78也会正常接收,但是还是会告诉发送端我需要4以后的报文段。
在这里插入图片描述
在这里插入图片描述
RTT是往返时间,即一个报文段发送到收到确认为止的时间。每一个报文段都能算出一个RTT,最终算出RTTS。
但是如果RTTS还是太久了—>冗余ACK
快速重传:当发送方接收到同样的三次确认后执行快速重传,在计时器结束之前发送可以节省等待时间。
在这里插入图片描述

2.3 TCP流量控制

接收方利用确认报文段中的窗口字段控制发送方滑动窗口大小,窗口字段也可以是0,发送方不在发送,此时TCP缓存较多,需要接收方上缴一部分数据给应用层。但是这里存在一个问题便是,当发送方不在发送了,即使接收方上传应用层完毕,但是如果没有多余的动作,两者都会陷入等待。此时:
在这里插入图片描述

这里同样可以发送方发送很多报文段,最终接收方只确定回复一个最终的确认报文段,
在这里插入图片描述

2.4 TCP拥塞控制

在这里插入图片描述
在这里插入图片描述
慢开始与拥塞避免:
窗口大小由发送方的拥塞窗口确定,窗口大小随着传输轮次(RTT)而增大,而当窗口大小达到慢开始门限(ssthresh),则进入拥塞避免,窗口大小的增长速率减小,但是还在增长。直到出现网络拥塞、丢包等现象,直接在几个轮次内将窗口大小改为初始值(最小),而新的一轮慢开始的门限则是网络拥塞时的窗口大小➗2。
在这里插入图片描述
快重传与快恢复:
快重传:当发送方接收到同样的三次确认后执行快速重传,在计时器结束之前发送可以节省等待时间。
当收到3个重复的确认时,认为报文段丢失,此时陷入拥塞,进行快速重传,窗口大小直接降到拥塞窗口大小➗2,也就是新的门限值哪里;然后进行快速回复。
在这里插入图片描述
在这里插入图片描述

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-26 02:28:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-26 02:28:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-26 02:28:02       87 阅读
  4. Python语言-面向对象

    2024-03-26 02:28:02       96 阅读

热门阅读

  1. blender插件笔记

    2024-03-26 02:28:02       39 阅读
  2. 微信小程序如何实现扫码一键连WiFi功能

    2024-03-26 02:28:02       40 阅读
  3. 绘制多个box箱型图

    2024-03-26 02:28:02       40 阅读
  4. 在 Vue.js 3 中封装全屏功能工具类

    2024-03-26 02:28:02       44 阅读
  5. matplotlib使用总结1

    2024-03-26 02:28:02       30 阅读
  6. 小程序网络视频组件video经常出现的错误解决

    2024-03-26 02:28:02       77 阅读
  7. Vue【七】实现图片上传与预览

    2024-03-26 02:28:02       37 阅读
  8. ubuntu20.04\22.04 + GTX3060(直接硬盘安装)

    2024-03-26 02:28:02       44 阅读
  9. 小程序设置图片高度自适应

    2024-03-26 02:28:02       35 阅读