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 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 认识TCP与UDP -> 正文阅读

[网络协议]认识TCP与UDP

目录

1. 再谈端口号

1.1?五元组:

1.2 端口号范围划分

1.3 认识知名的端口号:

1.4 常见问题:

2.?UDP协议

2.1 UDP协议端格式

2.2 常见问题

3. TCP协议

3.1 TCP设计原则

3.2 TCP数据格式

3.3 TCP的安全机制



传输层:负责数据能够从发送端传输到接收端

1. 再谈端口号

端口号(Port)标识了一个主机上进行通信的不同的应用程序

1.1?五元组:

在TCP/IP协议中,用“源IP”,“源端口号”,“目的IP”,“目的端口号”,“协议号”这“五元组”来标识一个通信(可以通过netstat-n 查看)

协议:网络数据传输时,经过的网络节点约定的规则,最终体现为数据格式

IP:在网络层IP协议中包含ip地址这个字段,体现为起点和终点,用来绑定主机

port:主机中的进程

1.2 端口号范围划分

  • 0-1023:知名端口号,HTTP,FTP,SSH等这些广为使用的应用层协议,他们的端口号都是固定的;
  • 1024-65535:操作系统动态分配的端口号,客户端程序的端口号,就是由操作系统从这个范围分配的。

1.3 认识知名的端口号:

有些服务器是非常常用的,为了使用方便,人们约定一些常用的服务器,都是用以下这些固定的端口号:

  • ssh服务器,使用22端口
  • ftp服务器,使用21端口
  • telnet服务器,使用23端口
  • http服务器,使用80端口
  • https服务器,使用443端口

我们自己写一个程序使用端口号时,要避开这些知名端口号

1.4 常见问题:

  • 一个进程是否可以绑定多个端口号?

? ? ? ?可以

  • 一个端口号是否可以被多个进程绑定?

? ? ? ?不可以

端口号是对应进程的

2.?UDP协议

UDP传输过程类似于寄信

2.1 UDP协议端格式

  • 16位UDP长度,表示整个数据报(UDP首部+UDP数据)的最大长度
  • 如果校验和出错,就会直接丢弃

校验和:类似文件的md5,sha1值作为校验码,通过一个算法,计算二进制数据,算出一个校验码,类似java对象中的hashcode,标识唯一

2.2 常见问题

  • UDP和TCP的区别?(把UDP,TCP的特点对比并说明:UDP的特性+效率比TCP更高

答:UDP的特性:

(1)无连接,不可靠(要保持连接,意味双方保持一个连接状态)

(2)面向数据报(发送和接收,都只能一次完成)

(3)有接收缓冲区,没有发送缓冲区(发送方不关心对方是否接收到,接收方可以接收多个UDP数据)

(4)发送数据大小受限(最多64K因为协议首部长度为16位

  • 如何用UDP传输超过64K的数据?

答:需要在应用层手动分包,多次发送,并在接收端手动拼接

  • 如何用UDP来实现可靠传输?

答:在应用层,应用程序中(自己的代码)实现类似TCP的机制,可靠,大小不限

3. TCP协议

TCP全称为“传输控制协议”,即要对传输的数据进行一个详细的控制

3.1 TCP设计原则

网络数据传输,在保证安全的前提下,尽可能的提高传输效率

  • 安全越高,效率越低
  • 安全越低,效率越高? ? ?=>UDP效率比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(序号)到服务端

  • 这里的SYN是客户端到服务端的连接

(2)服务端响应SYN,ACK(应答第一个步骤的SYN),SEQ_NO+1(确认序号)到客户端

  • 这里的SYN是服务端到客户端的连接

? ? ? ? ?客户端接收到响应,建立客户端到服务端的连接(客户端保存这个连接状态)

(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地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-08-15 15:56:06  更:2021-08-15 15:56:26 
 
开发: 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-

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