简单了解传输层协议之TCP和UDP

news/2024/5/18 16:08:50 标签: tcp/ip, udp, 网络协议, 计算机网络, 网络安全, HCIA, 考研

目录

一、什么是端口号?

二、TCP协议

2.1 TCP报文格式

2.2 三次握手

2.3 四次挥手

2.4 窗口流量控制

三、UDP协议

3.1 UDP报文格式

3.4 传输过程


一、什么是端口号?

我们自己的一台电脑上有时可能会同时运行多个进程软件来进行上网。那么当网络上的服务器响应我们电脑进程的请求并回复数据包发给我们电脑时,我们电脑从网卡中收到数据帧后,应该将数据包交给电脑中那个正在运行的进程软件进行处理呢? 此时端口号就派上用场了,端口号的作用就是用来区分主机上正在运行的不同服务软件,这也就是为什么网络服务端与客户端的通信数据帧在运输层都会包含一个源目端口号的原因,就是为了方便目地主机知道要将收到的数据包交给上层的那个正在运行的服务进行处理。

端口号范围:1-65535

1~1024称为知名端口号或固定端口号,这些端口号默认被永久分配给某个应用使用。如 80端口代表http、 telnet为23端口、 ssh为22端口、ftp为20/21号端口等。

1024以上的端口号被称为高位端口号或随机端口号,一般供用户自定义分配服务程序使用。

 

二、TCP协议

2.1 TCP报文格式

Seq:序列号------每发一个报文就会产生一个的序列号---1.2.3...6...

Ack: 对序列号确认----表明我收到了此个报文

HL:头部长度

SYN:请求建立连接

FIN : 请求断开连接

RST: 请求重新建立连接

ACK:确认、对标识位的确认

windows: 窗口,流量

 

2.2 三次握手

TCP建立连接:向对方发送数据前先给对方打声招呼,协商下通信参数、看双方通信链路是否稳定。

主机A: 10.11.12.13 ….

主机B: 100.101.102….

主机A和主机B要建立TCP连接

ack表示对方的确认,大ACK表示同意请求,小ack表示对对方包的确认收到。

1.主机A发送TCP连接 ---SYN=1 (请求建立连接) seq=10 (包序列标号)

2.主机B同意主机A与其建立连接 ACK=1 ack=11(表示收到了主机A的报文、可以发送下一个11报文了)、同时由于数据传输是双向的,此时主机B也需要与主机A建立连接请求。SYN=1 seq=100。所以综合起来报文包含ACK=1 ack=11, SYN=1 seq=100。

3.主机A收到主机B的请求建立连接、同意与其建立连接。ACK=1(同意) ack=101(表示收到主机B的请求报文了、主机B可以发送下个101报文给我了) seq=11(表示主机A发送的第二个报文)。综合起来报文包含ACK=1 ack=101 seq=11。

2.3 四次挥手

TCP关闭连接

场景:主机A数据传输完毕,但服务器向主机A响应的数据并没有发送完毕。

1.主机A数据传输完毕 FIN=1(请求断开连接)seq表示此次发送的是第几个包 ack 表示对服务器上次发来的包的确认。

2.服务器同意主机A向自身发送流量的方向断开连接  ACK=1

以上过程、主机A就完成了断开连接,无法再向服务器发送连接,以下过程结束双向连接断开,会话结束。

3.过了一会服务器向主机A发送流量结束,请求断开连接 FIN=1 seq表示现在发送的是第几个数据包 ack表示对主机A上次发送给自己的一波报文流量的确认。

4.主机A同意服务器与自己断开连接 ACK=1。

 

2.4 窗口流量控制

window窗口字段用于标识本机缓存区的大小 。缓存区有多大就表明自身可以储存多少流量以及每次可以发送多少流量出去。通过丢包确认机制互相协调,彼此之间缓存区的大小,来调整彼此之间每次可以接收和发送多少流量。

三、UDP协议

3.1 UDP报文格式

在向目的主机发送数据信息时,不需要给对方事先打招呼就直接将数据帧发送给目的主机。同时数据包在传输过程中有丢失就丢失了,源主机并不会在重新发送一份给目的主机。这样以来由于通信双发不需要事先发送数据报文建立连接、协商参数、也没有丢包重传机制,所以使用UDP进行通讯传输处理效率会很高,但无法保证通信的可靠性,因此对时延比较敏感的数据,一般选择UDP。如:语音、视频。

 

3.4 传输过程

 

由于UDP协议没提供数据确认重传机制,因此只能由使用UDP协议的主机上的应用程序来提供报文的确认、排序、流控等操作。

@声明:“山月润无声”博主知识水平有限,以上文章如有不妥之处,欢迎广大IT爱好者指正,小弟定当虚心受教!


http://www.niftyadmin.cn/n/5238622.html

相关文章

C#中HttpWebRequest最大并发和性能

在C#中使用HttpWebRequest发起HTTP请求时,达到最大并发和性能可以从以下几个方面改进: 1. ServicePointManager设置 ServicePointManager 类是一个静态类,它提供了用于管理HTTP连接的属性和方法。为了提升并发性能,你需要调整以…

Windows安装Kafka3.6,单机

Kafka版本:kafka_2.13-3.6.0 Windows10系统 安装与配置 下载 kafka_2.13-3.6.0.tgz 下载并解压Kafka 3.6.0的压缩包到你选择的目录。 Kafka3.6.0下载链接https://kafka.apache.org/downloads 说明:Kafka3.6内置了Zookeeper,使用内置的Zo…

《python每天一小段》--(9)使用Paramiko库,批量操作linux服务器

使用Paramiko库,批量操作多Linux服务器 使用Paramiko库建立SSH连接并执行命令获取多个Linux服务器的磁盘信息。通过这个例子,你可以学习到如何使用Python自动化操作远程服务器。 操作如图: 查看了两台服务器的磁盘容量: 安装模…

QT 无法打开包括文件 “xxxx.h”: No such file or direcotry 提升控件后提示找不到头文件

问题复现 UI文件提升控件后,提示找不到头文件。 原因 Qt中的ui文件会经过moc编辑器生成ui_xxx.h头文件。 在主页面的ui文件中因为使用了提升的widget,所以ui的ui头文件因该包含自定义控件的头文件。但是头文件的路径可以看出已经错误了。 #include &…

汉威科技家电传感器解决方案,助力智能家电市场蓬勃发展

2017年以来,我国家电市场承压前行,零售总额基本保持在9000亿元左右,虽然距离万亿市场只有一步之遥,却一直未能企及。随着物联网、传感器、AI、云计算、大数据、5G等技术的快速发展迭代,智能家电成为行业转型发展的突破…

如何使用torchrun启动单机多卡DDP并行训练

如何使用torchrun启动单机多卡DDP并行训练 这是一个最近项目中需要使用的方式,新近的数据集大概在40w的规模,而且载入的原始特征都比较大(5~7M),所以准备尝试DistributedDataParallel; 主要目…

鱼香ROS一键安装命令(支持微信、docker、ros等)

按照指定的数字选择即可。 wget http://fishros.com/install -O fishros && . fishros小鱼的一键安装系列 [14个ROS版本任你选]一键安装Docker使用指南

unity学习笔记18

模型文件属性简介 1.动画类型:一共有四种:无 表示没有动画,旧版 就表示这个模型文件里面的动画片段可以用animation组件来播放的,最后两个 ”泛型“和“人形”都是animator组件来播放的。区别是泛型支持所有类型的动画播放&#x…