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 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 工作准备-04(计算机网络--TCP、UDP通信总结) -> 正文阅读

[网络协议]工作准备-04(计算机网络--TCP、UDP通信总结)

计算机网络部分

TCP的三次握手和四次挥手

在这里插入图片描述

三次握手
第一次握手:Client将标志位置为1,随机产生一个seq=x,并将改数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。

第二次握手:Server收到数据包后将标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack=x+1,随机产生一个seq=y,并将数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。

第三次握手:Client收到确认后,检查ack是否为x+1,ACK是否为1,如果正确将标志位ACK置为1,ack=y+1,并将数据包发送给Server,Server检查ack是否为y+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client和Server之间可以进行传输数据。

在这里插入图片描述
四次挥手
第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态

第二次挥手:Server收到FIN后,发送一个ACK到Client,确认序号为收到序号u+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态

第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。

第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号w+1,Server进入CLOSED状态,完成四次挥手。

TCP与UDP之间的不同

  1. TCP面向连接,udp是无连接的,即发送数据之前是不需要建立连接的
  2. TCP提供可靠地服务,也就是说,通过TCP连接传送的数据无差错,不丢失,不重复,且按序到达,UDP尽最大努力交付。
  3. TCP面向字节流,实际是TCP把数据看成一连串无结构的字节流,UDP是面向报文的,UDP没有拥塞控制
  4. TCP连接是点对点的,UDP支持一对一,一对多,多对一,多对多的交互通信。
  5. TCP首部开销20字节,UDP8个字节。
  6. TCP的逻辑信道是全双工的可靠信道,UDP是不可靠信道。

为什么需要三次握手?

** 答:**
1. 防止已经失效的建立连接请求“死灰复燃”,如果之前我们发送的请求连接在网络中某个地方被阻塞了,得不到服务端的响应,但是在某个节点突然被服务端接收到了,服务端开始发送第二次确认握手(同意建立连接),但是这并不是我们当前需要的连接,所以为了不让服务端等待客户端发送数据的状况出现,我们需要三次握手来进行确认连接,在没收到客户端的连接确认时,服务端不会与客户端进行连接。
2. 可以用来检测当前连接是否正常。TCP是全双工通信方式,当服务端发送给服务端请求连接信号且服务端发送确认连接信号给服务端,客户端能够正常接收到此确认信号,这可以证明客户端的发送和服务端的接收没问题;当客户端接收到服务端的确认信号并发送确认信号给服务端且服务端可以正确接收到此确认信号,可以证明客户端接收和服务端发送没问题。

为什么需要四次挥手?

** 答:**
由于连接关闭的控制权在应用层,所以被动关闭方接收到FIN请求时,TCP协议栈会发送一个ACK确认包,优先关闭一方通信,之后通知应用层,由应用层决定什么时候发送FIN包。应用层可以调用系统函数read() == 0,判断对端是否已经关闭连接了。

为什么在四次挥手过程中需要等待2MSL时间呢?

** 答:**
1. 如果主动关闭方在第四次挥手的时候没有进行TIME_WAIT状态等待而直接进入关闭状态,则如果被动关闭方没有接收到ACK信号的时候,就会不断发送FIN信号并等待主动关闭方应答,被动关闭方一直处于未关闭状态。
2. 如果主动关闭方不进行2MSL等待直接进入CLOSED,当此连接的一些数据还残留在网络中时,当下次连接时会接收到上次遗留下来的数据,因为服务端在发送FIN之前可能会发送一些其他的数据,但并不能保证这些数据一定能够比FIN信号先到达客户端;如果等待2MSL时间,一定能够使这些遗留的数据全部消失,从而不影响同一IP、同一端口的下次连接。

TCP如何保证可靠传输

  1. 校验:每个TCP头部之前都有一个伪首部
  2. 序号:每一个TCP包头都有一个序号
  3. 确认:发送方在一定时间内未收到来自接收方对发送报文的确认信号,则认为发送的报文丢失。
  4. 重传:在未收到确认一段时间(TCP采用延时确认时间自适应算法,动态改变重传时间RTTs)之后重新传送之前未收到确认的报文。

TCP如何进行流量控制

流量控制思想就是:接收方根据自己的情况动态调整发送方发送数据量的大小。
发送方根据自己接收缓存的大小设置接收窗口大小rwnd,发送方取rwnd和拥塞窗口中的较小值作为发送数据窗口。

TCP如何进行拥塞控制

  1. 慢启动(启动的时候拥塞窗口指数增长)
  2. 拥塞避免(大于一定门限后,线性增长,一旦发生网络拥塞,就重新慢启动(TCP Tahoe版本,这个版本已经废弃不用了))
  3. 快重传
  4. 快恢复(发生网络拥塞时不是慢启动,而是拥塞窗口减半后,重新拥塞避免)
  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-08-18 13:03:32  更:2021-08-18 13:05:22 
 
开发: 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/25 20:36:08-

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