超详细的计算机网络基础知识总结 第五章:传输层
Posted 温文艾尔
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了超详细的计算机网络基础知识总结 第五章:传输层相关的知识,希望对你有一定的参考价值。
本文基于
:王道计算机考研-计算机网络
☺其他文章:
超详细的计算机网络基础知识 第一章:概述
超详细的计算机网络基础知识 第二章:物理层
超详细的计算机网络基础知识 第三章:数据链路层
超详细的计算机网络基础知识 第四章:网络层
超详细的计算机网络基础知识 第六章:应用层
你的支持就是博主继续更新的动力!计算机网络将会持续更新☺
相见即是有缘,如果对你有帮助,给博主一个免费的点赞以示鼓励把QAQ☺
1 传输层概述
传输层使用网络层的服务并为应用层提供服务
传输层的功能
- 传输层提供进程和进程之间的
逻辑
通信 复用
和分用
- 对收到的报文进行
差错监测
(针对数据部分)
传输层+网络层便可实现可靠传输,一个针对数据部分进行差错监测,一个针对头部进行差错检测
1.2 传输层的两个协议
UDP
- 不可靠,无连接,时延小,适用于小文件
TCP
- 可靠,面向连接,时延大,适用于大文件
1.3 传输层的寻址与端口
- 端口号长度为
16bit
,能表示65536
个不同的端口号
常见的熟知端口号
2 UDP协议
UDP对于报文既
不会合并
,也不会拆分
,所以发送的数据不能过长,
当报文过长交给UDP,UDP不会进行分片而是将其转交给网络层,势必会
降低网络层的效率
UDP只在IP数据报服务商增加了很少功能,即
复用分用
和差错监测
功能
2.1 UDP首部格式
2.2 UDP校验
伪首部只有在计算检验和时才出现,不向下传送也不向上递交
2.3 UDP校验流程
在发送端
- 1.添上伪首部
- 2.将图中每一行平均分成两部分,比如153.19.8.104分成153.19和8.104,将其中转换为二进制数,比如153.19
- 转换为:10011001 00010011,每一行都这么转换,最后的样子如图中
- 3.伪首部+首部+数据部分采用二进制反码求和
- 4.把求和反码填入检验和字段
- 5.去掉伪首部,发送
在接收端
- 1.填上伪首部
- 2.伪首部+首部+数据部分采用二进制反码求和(在发送方校验和字段应该是全0,但是在接收方
- 校验和字段是在接收方计算出来的校验和字段)
- 3.结果全为1则无差错,否则丢弃数据报/交给应用层附上出差错的警告
3 TCP协议的特点
- TCP是
面向连接
(虚连接)的传输层协议
- 每一条TCP连接只能是
点对点
的 - TCP是
可靠
的,不丢不重 - TCP提供
全双工通信
- TCP
面向字节流
3.1 TCP报文段首部格式
确认号:期待对方要发送报文段的第一个字节序号
名称 | 作用 | 位数 |
---|---|---|
序号 | 一个TCP连接中传送的字节流中得到每一个字节都按顺序编号本字段表示本报文段所发送数据的第一个字节的序号 | 32 |
确认号 | 期望收到对方下一个报文段的第一个数据字节的序号。若确认号为N,则证明到序号N-1为止的所有数据都已正确收到 | 32 |
窗口 | 指的是发送本报文段的一方的接收窗口,即现在允许对方发送的数据量 | 16 |
检验和 | 检验首部+数据,检验时要加上12B伪首部,第四个字段为6 | 16 |
紧急指针 | URG=1时才有意义,指出本报文段中紧急数据的字节数 | 16 |
选项 | 最大报文段MSS、窗口扩大、时间戳、选择确认… | - |
3.1.1 6个控制位
紧急位URG
URG=1时,标明此报文段中有紧急数据,是高优先级的数据,应尽快传送,不用在缓存里排队,配合紧急指针字段
使用
确认位ACK
ACK=1时确认号有效,在连接建立后所有传送的报文段都必须把ACK置为1
推送位PSH
PSH=1时,接收方尽快交付接收应用进程,不再等到缓存填满再向上交付
复位RST
RST=1时,表明TCP连接中出现严重差错,必须释放连接,然后再重新建立传输链接
同步位SYN
SYN=1时,表明是一个连接请求/连接接受报文
终止位FIN
FIN=1时,表明此报文段发送方数据已发完,要求释放连接
3.2 TCP连接管理
TCP连接的建立采用客户/服务器方式
3.3 TCP的连接建立
我们来走一遍主机与服务器的三次握手的过程
seq:发送方所发送的数据流
ack:发送方期待收到下一位数据的序号
第一段:
客户端发送连接请求报文段,无应用层数据
发送:SYN=1(表示连接请求)
seq=x(因为并未携带数据,故x为随机数)
第二段:
服务端响应请求,无应用层数据
发送:SYN=1(表示确认连接请求)
ACK=1(表示连接建立,连接建立后所有传送的报文段都必须把ACK置为1)
seq=y(因为还没有数据,y是一个随机数)
ack=x+1(因为客户端第一次发送x位数据,所以ack期待下一次得到的第一条数据为x+1)
第三段:
客户端收到服务端响应之后返回一个确认的确认,告诉服务器,我知道咱们俩已经建立连接了,接下来我要发送数据了
第三段报文段可以携带数据
发送:
SYN=0(SYN只有在请求连接已经确认请求连接才会为1,其余时间均为0)
ACK=1(因为上一步已经建立了连接,所以之后的ACK均为1)
seq=x+1(发送的是第x+1位数据)
ack=y+1(因为服务端发送了数据y,所以期待服务端返回的数据为y+1)
三次握手所导致的SYN洪泛攻击
黑客发送的SYN使三次握手中断,使连接处于挂起状态,此时服务器会再次进行确认,重复发送ACK给攻击者,导致大量的TCP连接挂起,消耗大量CPU与内存,导致服务器死机
3.4 TCP的连接释放
第一段:
客户端信息发送完毕,请求释放连接
发送:FIN=1(FIN=1时,表明此报文段发送方数据已发完,请求释放连接)
seq=u(通常这个报文段是没有数据的,我们这里用u代指一下)
第二段:
服务器端对连接释放请求进行确认
发送:ACK=1(表示连接建立,连接建立后的每个ACK都置为1)
seq=v(发送的数据v,这里是代指)
ack=u+1(客户端发送的数据为u,所以期待下次收到的数据为u+1)
此时服务器还有未发送完的数据,处于半关闭状态
第三段:
服务器数据发送完毕释放连接
发送:FIN=1(表明服务器的数据发送完毕,准备释放连接)
ACK=1(建立连接后每个ACK均为1)
seq=w(发送数据w)
ack=u+1(因为最近的与客户端的连接中,客户端发送了数据u,所以期待下一次收到数据u+1)
第四段:
客户端确认服务器端释放连接的请求
发送:ACK=1(连接建立后ACK均为1)
seq=u+1(上次发送了数据u,这次发送数据u+1)
ack=w+1(收到了服务端发送的数据w,期待收到数据w+1)
回复确认报文段之后等待2MSL客户端才真正彻底关闭
为什么要等待2MSL才彻底关闭?
客户端需要保证确认报文段没有丢失,正常到达服务器端,如果丢失,客户端就会在2MSL里收到服务器端重传的第
三个报文段,会再次发送确认报文段
4 TCP可靠传输
不可靠
的UDP需要靠上层的应用层
来实现可靠传输
可靠的含义是:
保证接收方
进程从缓存区读出的字节流与发送方发出的字节流是完全一样
的
4.1 序号
tcp协议是面向字节流的,他会把一个字节编上一个序号,实际发送时以报文段为单位,报文段的大小取决于数据链路层的MTU(最大传输单元)
4.2 确认
发送方发送报文段之后需要等待接收方的确认,以防止报文丢失
,直到收到确认才会将报文段删除
TCP确认使用的是累计确认机制
实现可靠传输,假如图中456报文段丢失,78报文段按时送到,则下一次期待收到的报文段会是4
4.3 重传
因为网络的复杂性,规定的重传时间不能太长也不能太短,而TCP采用自适应算法
,动态改变重传时间RTTs(加权平均往返时间)
5 TCP流量控制
因为发送的数据过快,使接收方来不及接收,这样会导致严重的丢包现象,所以需要流量控制,来控制发送方的发送速率
在通信过程中,接收方根据自己接收缓存的大小,动态
的调整发送方的发送窗口大小
,即接收窗口rwnd(接收方设置确认报文段的窗口字段来将rwnd通知给发送方),发送方的发送窗口取接收窗口rwnd和拥塞窗口cwnd的最小值
我们可能会遇到这种情况:
主机B发送的报文段在返回的过程中丢失,A会一直处于等待的状态,等待B发来一个非0窗口的通知,B也一直等待A要发送的数据,类似于死锁局面,主机A和主机B会一直相互等待
我们采用的方法是:设置计时器
6 TCP拥塞控制
拥塞控制是全局性的问题,是为了防止过多的数据注入到网络中,因为网络拥塞由多台主机造成而非某一台主机
拥塞控制与流量控制的区别
- 流量控制是
点到点
之间的问题,而拥塞控制是全局性
的问题 - 拥塞控制是
网络
发生堵塞,导致很多发送方的数据迟迟到不了接收方,而流量控制是发送方的速率过快
导致接收方接收窗口不够
6.1 拥塞控制四种算法
6.1.1 慢开始和拥塞避免算法
慢开始:
指数规律增长,慢指的是刚开始注入1个报文段,网络态势良好的话则会增加注入,直到达到最大门限,如图中的
传输轮次为4时,门限为16,因为注入的报文段很多,进入拥塞避免阶段
拥塞避免:
线性规律增长,直到达到网络拥塞状态
出现网络拥塞现象时,将窗口值设置为1,并将门限值设置为网络拥塞状态的1/2,然后继续执行慢开始,拥塞避免,
直到下一个网络拥塞,循环往复
6.1.2 快重传和快恢复
从指数式增长转变为线性增长,当收到多个冗余确认就会执行快重传算法,快重传和快恢复算法只会在收到多个连续的相同ack
后才会执行
执行快恢复后,窗口值不用降到1,而是降到出现重复确认时的窗口值的一半
7 本章思维导图
☺其他文章:
超详细的计算机网络基础知识 第一章:概述
超详细的计算机网络基础知识 第二章:物理层
超详细的计算机网络基础知识 第三章:数据链路层
超详细的计算机网络基础知识 第四章:网络层
超详细的计算机网络基础知识 第六章:应用层
你的支持就是博主继续更新的动力!计算机网络将会持续更新☺
相见即是有缘,如果对你有帮助,给博主一个免费的点赞以示鼓励把QAQ☺
以上是关于超详细的计算机网络基础知识总结 第五章:传输层的主要内容,如果未能解决你的问题,请参考以下文章