| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 网络协议 -> 日志(2022.3.14---TCP和UDP的区别TCP三次握手四次挥手) -> 正文阅读 |
|
[网络协议]日志(2022.3.14---TCP和UDP的区别TCP三次握手四次挥手) |
今天主要学习了TCP和UDP的相关内容(本篇我觉得挺重要,日后要多拿出来看)。 首先TCP和UDP都在传输层,目的都是为了在程序之间传递数据。 TCP是面向连接的,可靠的,而UDP是无连接的,不可靠的(即不需要建立连接,发送端也不知道数据是否正确传送到接收端)。 TCP仅支持一对一,用于查看邮件,网页等,UDP支持一对多,多对多,如视频,电话。 TCP传输慢,头部有20个字节,有确认号,表示是否确认收到消息;还有头长度,头的长度;预留位,控制位,控制每个状态;UDP,传输很快,头部只有8个字节,包含了两个十六位的端口号(源端口和目标端口);整个数据报文的长度;整个数据报文的检验和(用于发现头部信息和数据中的错误)。 TCP是如何建立连接的? TCP建立连接进行了三次传输,即三次握手;过程如下:客户端会先发一SYN包数据请求连接,询问是否能建立连接,如果服务端同意连接,就会回复一个SYN+ACK包;客户端收到之后,会再发送一个ACK包给服务端,表示收到服务端的确认包。此时连接全部完成。 为什么要三次握手? 因为网络信道是不可靠的,如果是二次握手就完成的话,当客户端第一次发送SYN包时,可能会因为网络原因导致延迟,此时客户端会再次发送一个包给服务端,服务端同意连接后,会回复SYN+ACK包给客户端,等第一个SYN包到达服务端的时候,服务端会认为客户端又发送了一次连接请求,此时服务端会再次回复一个SYN+ACK包,从而等待客户端发送数据,此时会造成服务端的资源浪费。 其本质就是为了解决网络信道不可靠的问题。为了在不可靠的信道上建立可靠的连接。 TCP在如何传输数据?即如何解决丢包,顺序的问题? TCP为每个连接都建立了一个缓冲区,建立连接的第一个字节序列号为0,后面依次增加1,在发送数据的时候,会在缓冲区取一部分数据组成发送报文,在tcp协议头上会附带序列号和长度。 ? ? ? ? 之后接收端接收到数据之后,会回复确认报文:ACK=序列号+长度,即下次起始的序列号。这边可以解决丢包顺序的问题。 ? ? ? ? 这部分感觉网上大部分都说的不是很清晰,所以打算明天把计算机网络书拿出来在好好研究一番。 TCP在连接之后如果关闭连接? ? ? ? ? 要进行四次传递,其实就是通常所说的四次挥手。 ????????客户端主动向服务端关闭连接,客户端向服务端发送一个FIN包,表示关闭连接,自己禁止终止等待状态;此时服务端收到FIN包,发送一个ACK包,表示自己进入了关闭等待状态,客户端进入终止等待2状态;此时服务端还可以发送数据,当发送完数据之后,服务端向客户端发送一个FIN包,自己进入最后确认状态 ;客户端收到之后会回复一个ACK包,并进入超时等待状态,经过超时时间后关闭连接(超时时间是为了保证对方已经收到了ACK包,倘若立即关闭,当ACK包丢失了,此时服务端会一直在最后确认状态,有了这个之后,如果ACK包丢失,超时时间到了之后,则服务端会重新发送一个FIN包,客户端响应之后会重发ACK包,并刷新响应时间),服务端收到后,立即关闭。? 也是为了保证在不可靠的网络链路中,进行可靠的连接断开。 |
|
网络协议 最新文章 |
使用Easyswoole 搭建简单的Websoket服务 |
常见的数据通信方式有哪些? |
Openssl 1024bit RSA算法---公私钥获取和处 |
HTTPS协议的密钥交换流程 |
《小白WEB安全入门》03. 漏洞篇 |
HttpRunner4.x 安装与使用 |
2021-07-04 |
手写RPC学习笔记 |
K8S高可用版本部署 |
mySQL计算IP地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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 5:28:06- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |