IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 网络协议基础07--传输层 -> 正文阅读

[网络协议]网络协议基础07--传输层

面试可能会问到:什么是TCP的可靠传输/流量控制/拥塞控制/建立连接释放连接?

传输层有2个协议:UDP用户数据报协议和TCP传输控制协议

TCP应用层协议:HTTP、HTTPS、FTP、SMTP、DNS(表示应用层要是用的是HTTP协议的话,传输层必然用的是TCP协议)

UDP应用层协议:DNS

UDP

UDP首部中,端口号占16位,客户端的源端口是临时开启的随机端口

协议默认端口号
HTTPTCP+80
HTTPSTCP+443
FTPTCP+21
MySQLTCP+3306
DNSUDP/TCP+53
SMTPTCP+25
POP3TCP+110

?TCP

?

标志位URG(当URG为1时,紧急指针字段才有效);ACK(ACK为1时,确认号字段才有效)

??????????????? PSH(……);RST(当RST为1时,表明连接中出现严重差错,必须释放连接再重连)

??????????????? SYN(当SYN=1,ACK=0时表示这是一个建立连接的请求,若对方同一建立连接回复SYN=1,ACK=1)

??????????????? FIN(当FIN=1,表示数据已发送完毕,要求释放连接)

序号:在建立连接后,这一次给对方的TCP数据部分的第一个字节的编号

确认号:建立连接后,期望对方下一次传过来的TCP数据部分的第一个字节的编号

窗口:有流量控制的功能,告知对方,下一次允许发送的数据大小

TCP的几个要点:

·可靠传输:保证服务器给客户端返回数据时,如果有包丢失了,会补发

·流量控制:告诉服务器我窗口大小,不要发太多太快

·拥塞控制:在流量控制的基础上,再进一步一起维护网络

·连接管理:三次握手,四次挥手

TCP--可靠传输

·停止等待ARQ自动重传请求(每发完一组数据,停止发送,等待对方确认后再发下一组)

·连续ARQ+滑动窗口(发送窗口中的连续分组,发送完之后,停止发送,等待确认)

·SACK选择性确认:TCP只发送丢失的包,已经收到的包会放在TCP头部的可选部分

思考:为什么在传输层就要把数据分成多个段传输,而不是等到在网路层分片传给数据链路层?

因为:可靠传输是在传输层进行控制的,网络层和数据链路层是没有可靠传输功能的,若不在传输层就分成一个一个的段,一旦数据丢失,整个传输层的数据都得重传。

TCP--流量控制(点对点)

什么是流量控制?

让发送方的发送速率不要太快,让接收方来得及处理、

为什么要进行流量控制?

如果接收方的缓存区满了,发送方还在疯狂发数据,接收方只能把收不下的数据包丢掉,大量的丢包会极大地浪费网络资源

TCP--拥塞控制(全局性)

作用:防止过多的数据注入到网络中,避免网络中的路由器过载

方法:

·慢开始:cwnd初值很小,随着接收方的确认,成倍增长

·拥塞避免:设置一个ssthred慢开始阈值,慢开始一段时间后,达到ssthred,以线性方式增加cwnd,当出现网络拥塞时,把拥塞峰值的一半作为ssthread,又从最初的慢开始设置的cwnd开始执行……

·快速重传:接收方只要接收到了一个失序的分组就给发送方发确认,发送方只要收到连续3个确认,就立刻重传丢失的报文

·快速恢复:出现拥塞控制后,不是从慢开始最初的cwnd开始,而是把cwnd设为新的ssthread,然后用拥塞避免线性增大

MSS:每个段最多能传多少字节(建立连接是在TCP头部可选部分表明,双方择其最小值)

rwnd:接收窗口

cwnd:拥塞窗口

swnd:发送窗口

swnd=min(rwnd,cwnd)

当rwnd<cwnd,是接收方的接受能力限制发送窗口的最大值

cwnd<rwnd是网络的拥塞限制

TCP--建立连接-3次握手

?在Windows上可以用netstat -ant -p TCP查看TCP状态,基本上只能看到Listen和Established

CLOSED:客户端处于关闭状态

SYN-SENT:客户端已经向服务端发起请求建立连接的报文,等待Server回复

LISTEN:服务端处于监听状态

SYN-RCVD:服务端收到了客户端发来的连接请求,返回给客户端ACK,等待客户端最终确认

ESTABLISHED:请求已经成功建立

前2次握手,TCP头部会放一些双方交换确认的信息,如MSS,窗口等,是否支持SACK

为什么要建立3次握手?2次不行吗?

建立3次握手的主要目的:为了防止已失效的连接请求报文段突然又传送到了服务端,防止Server端一直等待,浪费资源,产生错误。

TCP--建立连接-释放连接-4次挥手

?Client和Server谁想先发起断开连接都行。这里我们假设的是Client想先断开

FIN-WAIT-1:Client给Server发送了FIN报文,进入终止等待1。

FIN-WAIT-2:当收到了对方的ACK后,进入终止等待2。

CLOSE-WAIT:收到对方断开连接的请求就进入关闭等待状态,并回应对方一个ACK表示我收到了

LAST-ACK:被关闭一方发送FIN后进入最后确认状态,等待对方最后的ACK,收到后就可以进入CLOSED了

TIME-WAIT:收到了对方的FIN,并发送ACK报文,等2MSL后就可以进入CLOSED状态

有时候抓包工具会显示,第2、3次挥手合并了(表示我知道你没数据发了,同时我也没数据发了)

MSL:最大分段生存期,是指TCP报文在因特网上的最大生存时间,一般是2分钟。

为什么要等2MSL后再断开?即 TIME - WAIT 状态的作用是什么?

?------1.可以防止本次连接中产生的数据包误传到下一次连接中(因为客户端的端口是随机的,可能存在上一次连接的端口和下一次的端口刚好是一个的情况,设置为2MSL可以避免误传)。

-------2.为了保证客户端发送的最后1个连接释放确认报文 能到达服务器,从而使得服务器能正常释放连接 (客户端的第四次挥手可能丢失,如果立马关闭连接,服务器收不到客户端的最后一个释放报文会重发,此时客户端已经关闭了,会导致服务端连接关闭不了。
所以客户端要等到2倍报文存活时间,确保服务端关闭)
?

为什么要进行4次挥手?

因为TCP是全双工模式,释放连接后,双方都无法都无法接收 / 发送消息给对方。——第1次挥手:主机1告诉主机2,主机1已经没有数据要发给主机2了,但是主机1依然可以接收主机2发送来的数据。第2次挥手:表示主机2知道主机1没有数据要发了,但是主机2还是可以给主机1发的。第3次挥手:表示主机2告诉主机1,主机2已经没有数据要发给主机1了。第4次挥手:表示主机1知道主机2没有数据要发了,随后断开整个连接。

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-12-18 16:19:23  更:2021-12-18 16:20:21 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 12:25:10-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码