| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 网络协议 -> 认识TCP与UDP -> 正文阅读 |
|
[网络协议]认识TCP与UDP |
目录 传输层:负责数据能够从发送端传输到接收端 1. 再谈端口号端口号(Port)标识了一个主机上进行通信的不同的应用程序 1.1?五元组:在TCP/IP协议中,用“源IP”,“源端口号”,“目的IP”,“目的端口号”,“协议号”这“五元组”来标识一个通信(可以通过netstat-n 查看) 协议:网络数据传输时,经过的网络节点约定的规则,最终体现为数据格式 IP:在网络层IP协议中包含ip地址这个字段,体现为起点和终点,用来绑定主机 port:主机中的进程 1.2 端口号范围划分
1.3 认识知名的端口号:有些服务器是非常常用的,为了使用方便,人们约定一些常用的服务器,都是用以下这些固定的端口号:
我们自己写一个程序使用端口号时,要避开这些知名端口号 1.4 常见问题:
? ? ? ?可以
? ? ? ?不可以 端口号是对应进程的 2.?UDP协议UDP传输过程类似于寄信 2.1 UDP协议端格式
校验和:类似文件的md5,sha1值作为校验码,通过一个算法,计算二进制数据,算出一个校验码,类似java对象中的hashcode,标识唯一 2.2 常见问题
答:UDP的特性: (1)无连接,不可靠(要保持连接,意味双方保持一个连接状态) (2)面向数据报(发送和接收,都只能一次完成) (3)有接收缓冲区,没有发送缓冲区(发送方不关心对方是否接收到,接收方可以接收多个UDP数据) (4)发送数据大小受限(最多64K因为协议首部长度为16位)
答:需要在应用层手动分包,多次发送,并在接收端手动拼接
答:在应用层,应用程序中(自己的代码)实现类似TCP的机制,可靠,大小不限 3. TCP协议TCP全称为“传输控制协议”,即要对传输的数据进行一个详细的控制 3.1 TCP设计原则网络数据传输,在保证安全的前提下,尽可能的提高传输效率
3.2 TCP数据格式
常用标志位: ACK:确认序号是否有效 SYN:请求建立连接,我们把携带SYN标识的称为同步报文段 FIN:通知对方,本端要关闭了,我们称携带FIN标识的为结束报文段 3.3 TCP的安全机制1. 确认应答机制 2.超时重传机制 背景:基于确认应答机制,还不满足(没有收到应答,不能一直无限期的等待) 没有应答有两种可能:1.发送的数据丢包;2.应答的数据丢包 具体实现:在一定的时间范围内,如果没有接收到应答数据报,就需要重新发送 超时时间:受网络宽带等环境因素影响,带宽越大,传输越快,超时时间就可以小一些
答:TCP为了保证无论在任何环境下都能比较高性能的通信,因此会动态计算这个最大超时时间:一个底数时长,每次重发,在底数的基础上*2(2的指数方),达到一定的重传次数,意味着对方可能无法接收,需要关闭连接。 3.连接管理机制 在正常情况下,TCP要经过三次握手建立连接,四次挥手断开连接 申请建立到返回ACK确认应答才表示连接成功
(1)客户端发送SYN(建立连接的标志位)+SEQ_NO(序号)到服务端
(2)服务端响应SYN,ACK(应答第一个步骤的SYN),SEQ_NO+1(确认序号)到客户端
? ? ? ? ?客户端接收到响应,建立客户端到服务端的连接(客户端保存这个连接状态) (3)客户端再响应ACK到服务端,服务端接收到以后,建立服务端到客户端的连接(服务端保存这个连接状态) 连接的建立(保持连接的状态)是有方向的
?(1)客户端发送FIN到服务端,申请关闭连接,服务端状态设置为CLOSE_WAIT
(2)服务端响应ACK (3)服务端发送FIN到客户端,申请关闭连接,客户端接收到,状态设置为TIME_WAIT
(4)客户端响应ACK,服务端接收到以后,服务端关闭连接 常见问题: (1)第三步客户端没有直接设置为CLOSED关闭连接? 答:第四步的ACK可能丢包,所以需要等待(超时重传时间) [TIME_WAIT->CLOSED]客户端要等待一个2MSL(Max Segment Life,报文最大生存时间)的时间,才会进入CLOSED状态 (2)为什么第二步和第三步,没有像建立连接时一样合并数据包? 答:第二步是系统对TCP协议实现时,接收FIN,自动返回ACK,不用执行程序代码 ? ? ? ?第三步是程序手动调用执行(服务端关闭连接前,需要执行一些前置工作) (3)当服务器上出现大量CLOSE_WAIT状态时? ?就是因为服务器没有正确的关闭socket,导致四次挥手没有正确完成,这是一个BUG,只需要加上对应的close即可解决问题。 |
|
网络协议 最新文章 |
使用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/25 19:50:01- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |