网络层--TCP/UDP协议

news2024/12/24 2:38:35

目录

一、TCP/UDP协议介绍

1、UDP(User Datagram Protocol)--用户数据报协议

1.1 UDP报文格式

 1.2 UDP协议的特性

2、TCP(Transmission Control Protocol )--传输控制协议

2.1 TCP报文格式

2.2 TCP协议的特性

2.3 TCP三次握手

2.4 四次挥手 

三、TCP和UDP的区别

四、telnet协议--telnet协议--远程管理协议


一、TCP/UDP协议介绍

1、UDP(User Datagram Protocol)--用户数据报协议

UDP是无连接的、不可靠的面向消息的传输层协议,尽管UDP协议提供标标头和有效负载的完整性验证(通过校验和),但他不保证向上层协议提供消息传递,并且UDP层在发送后不会保留UDP消息的状态。

1.1 UDP报文格式

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

 1.2 UDP协议的特性

  1. 工作在传输层

  2. 提供不可靠的网络访问

  3. 非面向连接协议

  4. 有限的错误检查

  5. 传输性能高

  6. 无数据恢复特性

2、TCP(Transmission Control Protocol )--传输控制协议

  • TCP是面向连接的、可靠的进程到进程通信的协议
  • TCP提供全双工服务,即数据可在同一时间双向传输
  • TCP报文段
  1. TCP将若干个字节构成一个分组,叫报文段(Segment)。
  2. TCP报文段封装在IP数据报中

2.1 TCP报文格式

  •  源端口、目标端口:计算机上的进程要和其他进程通信是要通过计算机端口的,而一个计算机端口某个时刻只能被一个进程占用,所以通过指定源端口和目标端口,就可以知道是哪两个进程需要通信。源端口、目标端口是用16位表示的,可推算计算机的端口个数为2^16个,即 65536 (0-65535)

端口号的作用:用于区别应用程序,或者说用来区别协议(只能区别应用层协议)

客户端的端口号:随机的

服务端的端口号:一般是固定的

  • 序列号:发送端为每个字节进行编号,便于接收端正确重组
  • 确认号:(ack))用于确认发送端的信息
  • 首部长度:表示TCP报文段的首部长度,共4位,由于TCP首部包含一个长度可变的选项部分,需要指定这个TCP报文段到底有多长。它指出 TCP 报文段的数据起始处距离 TCP 报文段的起始处有多远。该字段的单位是32位(即4个字节为计算单位),4位二进制最大表示15,所以数据偏移也就是TCP首部最大60字节
  • 控制位:描述了设备目前处于什么状态

URG(紧急位):与紧急指针联动。表示本报文段中发送的数据是否包含紧急数据。后面的紧急指针字段(urgent pointer)只有当URG=1时才有效

ACK(确认位):表示是否前面确认号字段是否有效。只有当ACK=1时,前面的确认号字段才有效。TCP规定,连接建立后,ACK必须为1,带ACK标志的TCP报文段称为确认报文段

PSH(急切位): 提示接收端应用程序应该立即从TCP接收缓冲区中读走数据,为接收后续数据腾出空间。如果为1,则表示对方应当立即把数据提交给上层应用,而不是缓存起来,如果应用程序不将接收到的数据读走,就会一直停留在TCP接收缓冲区中

RST(重置位):如果收到一个RST=1的报文,说明与主机的连接出现了严重错误(如主机崩溃),必须释放连接,然后再重新建立连接。或者说明上次发送给主机的数据有问题,主机拒绝响应,带RST标志的TCP报文段称为复位报文段

SYN(同步位):在建立连接时使用,用来同步序号。当SYN=1,ACK=0时,表示这是一个请求建立连接的报文段;当SYN=1,ACK=1时,表示对方同意建立连接。SYN=1,说明这是一个请求建立连接或同意建立连接的报文。只有在前两次握手中SYN才置为1,带SYN标志的TCP报文段称为同步报文段

FIN(断开位):表示通知对方本端要关闭连接了,标记数据是否发送完毕。如果FIN=1,即告诉对方:“我的数据已经发送完毕,你可以释放连接了”,带FIN标志的TCP报文段称为结束报文段

状态位数值表示状态
SYN=1 请求建立连接
SYN=1 ACK=1同意和你连接
FIN=1 请求断开
FIN=1 ACK=1同意和你断开

          

滑动窗口大小:调节每次发送的数据包量

  • 服务端和客户端之间会根据实际情况自动调节数据包的个数

校验和:提供额外的可靠性紧急指针:标记紧急数据在数据字段中的位置

选项部分:其最大长度可根据TCP首部长度进行推算。TCP首部长度用4位表示,选项部分最长为:(2^4-1)*4-20=40字节

2.2 TCP协议的特性

1.工作在传输层
2.面向连接协议
3.全双工协议
4.半关闭-- 断开
5.错误检查(校验)
6.将数据打包成段,排序(给数据排序)
7.确认机制   (对面每发一个包,我会告诉对面我收到了)
8.数据恢复,重传
9. 流量控制,滑动窗口

2.3 TCP三次握手

第一次握手:客户端会主动发起 请求连接报文,报文序号是随机产生的x,并且报文中的控制位SYN=1--代表请求建立连接

--此时客户端处于SYN-SENT状态

第二次握手:当服务端接收到请求连接的报文会回复一个 报文,此时会产生随机序号y,生成一个确定号值为客户端请求报文的序号+1(x+1),然后控制位 SYN=1 ACK=1 代表同意建立连接

--此时服务器处于SYN-RCVD状态

第三次握手:当客户端收到 同意建立连接的报文时会回复一个确认报文会按照对方要求产生序号为x+1,在生成一个确认号值为 对方报文的序号+1(y+1),最后控制位的ACK=1代表收到对方同意连接的请求,

--此时客户端处于ESTAB-LISHED状态。服务器收到 ACK 报文之后,也处于ESTAB-LISHED 状态,此时,双方已建立起了连接。

 第一次、第二次握手不可以携带数据,只有第三次携带数据。

 试想如果是用两次握手,则会出现下面这种情况:

如客户端发出连接请求,但因连接请求报文丢失而未收到确认,于是客户端再重传一次连接请求。后来收到了确认,建立了连接。数据传输完毕后,就释放了连接,客户端共发出了两个连接请求报文段,其中第一个丢失,第二个到达了服务端,但是第一个丢失的报文段只是在某些网络结点长时间滞留了,延误到连接释放以后的某个时间才到达服务端,此时服务端误认为客户端又发出一次新的连接请求,于是就向客户端发出确认报文段,同意建立连接,不采用三次握手,只要服务端发出确认,就建立新的连接了,此时客户端忽略服务端发来的确认,也不发送数据,则服务端一致等待客户端发送数据,浪费资源。

2.4 四次挥手 

 

 第一次挥手:客户端发送一个 FIN 报文,报文中会指定一个序列号。此时客户端处于 FIN_WAIT1 状态。

--即发出连接释放报文段(FIN=1,序号seq=u),并停止再发送数据,主动关闭TCP连接,进入FIN_WAIT1(终止等待1)状态,等待服务端的确认。


第二次挥手:服务端收到 FIN 之后,会发送 ACK 报文,且把客户端的序列号值 +1 作为 ACK 报文的序列号值,表明已经收到客户端的报文了,此时服务端处于 CLOSE_WAIT 状态。
--即服务端收到连接释放报文段后即发出确认报文段(ACK=1,确认号ack=u+1,序号seq=v),服务端进入CLOSE_WAIT(关闭等待)状态,此时的TCP处于半关闭状态,客户端到服务端的连接释放。客户端收到服务端的确认后,进入FIN_WAIT2(终止等待2)状态,等待服务端发出的连接释放报文段。


第三次挥手:如果服务端也想断开连接了,和客户端的第一次挥手一样,发给 FIN 报文,且指定一个序列号。此时服务端处于 LAST_ACK 的状态。
--即服务端没有要向客户端发出的数据,服务端发出连接释放报文段(FIN=1,ACK=1,序号seq=w,确认号ack=u+1),服务端进入LAST_ACK(最后确认)状态,等待客户端的确认。


第四次挥手:客户端收到 FIN 之后,一样发送一个 ACK 报文作为应答,且把服务端的序列号值 +1 作为自己 ACK 报文的序列号值,此时客户端处于 TIME_WAIT 状态。需要过一阵子以确保服务端收到自己的 ACK 报文之后才会进入 CLOSED 状态,服务端收到 ACK 报文之后,就处于关闭连接了,处于 CLOSED 状态。
--即客户端收到服务端的连接释放报文段后,对此发出确认报文段(ACK=1,seq=u+1,ack=w+1),客户端进入TIME_WAIT(时间等待)状态。此时TCP未释放掉,需要经过时间等待计时器设置的时间2MSL后,客户端才进入CLOSED状态。

挥手为什么需要四次?
因为当服务端收到客户端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当服务端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉客户端,“你发的FIN报文我收到了”。只有等到我服务端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四次挥手。

三、TCP和UDP的区别

UDPTCP
是否连接无连接面向连接
是否可靠不可靠,不使用流量控制和拥塞控制可靠,传输使用流量控制和拥塞控制
传输方式面向报文面向字节流
连接对象个数支持一对一,一对多,多对一和多对多交互通信只能是一对一通信
首部开销首部开销小,仅8字节首部最小20字节,最大60字节
适用场景适用于实时应用 (IP电话、视频会议、直播等)适用于要求可靠传输的应用,例女文件传输
  •    TCP是面向连接的、可靠性的、基于字节流的传输控制协议
  •    UDP是无连接的、不可靠的、数据报传输的传输协议

四、telnet协议--telnet协议--远程管理协议

作用:探测远端服务器端口是否打开

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1312541.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

关于“Python”的核心知识点整理大全21

9.3.2 Python 2.7 中的继承 在Python 2.7中,继承语法稍有不同,ElectricCar类的定义类似于下面这样: class Car(object):def __init__(self, make, model, year):--snip-- class ElectricCar(Car):def __init__(self, make, model, year):supe…

xcode 修改 target 中设备朝向崩溃

修改xcode的target中的设备朝向导致崩溃。 从日志上看好像没有什么特别的信息。 之后想了想,感觉这个应该还是跟xcode的配置有关系,不过改动的地方好像也只有plist。 就又翻腾了半天plist中的各种配置项,再把所有的用户权限提示相关的东西之…

运筹学经典问题(三):最大流问题

问题描述 给定一个图网络 G ( V , E ) G(V, E) G(V,E),网络中连边的权重代表最大容量,在这个图中找出从起点到终点流量最大的路径。 数学建模 集合: I I I:点的集合; E E E:边的集合。 常量&#x…

全光谱的灯对人体有什么伤害?考公护眼台灯推荐

什么是全光谱?全光谱是是一种能够模拟自然光谱的照明设备,通过发出包含所有可见光波长的光线,使人们感受到与自然光类似的照明效果。不同于传统的白炽灯或荧光灯,全光谱灯被认为能够提供更好的视觉质量和更健康的光学经验。现在市…

泊松分布、泊松定理

泊松分布 假设随机变量所有可能的取值为,并且取各个值的概率为: , 其中是常数 那么就称服从参数为的泊松分布,记为。 泊松定理 设是常数,是任意正整数,并且,那么对任意一个非负整数&am…

新一代“垫图”神器,IP-Adapter的完整应用解读

导读 不用训练lora,一张图就能实现风格迁移,还支持多图多特征提取,同时强大的拓展能力还可接入动态prompt矩阵、controlnet等等,这就是IP-Adapter,一种全新的“垫图”方式,让你的AIGC之旅更加高效轻松。 …

14个最经典的git命令,你知道吗?

1 学习14个Git命令,因为你将会在99%的时间里使用它们 必须了解的命令整理 1,git init 初始化一个新的Git仓库。 这将在当前目录中创建一个名为".git"的子目录,Git会将所有仓库的元数据存储在其中。 2,git clone 克…

使用Python绘制二元函数图像详解

概要 在数据科学、数学建模和机器学习中,经常需要可视化二元函数的图像以更好地理解函数的行为。Python提供了丰富的绘图库,如Matplotlib和NumPy,使得绘制二元函数图像变得简便而灵活。本文将介绍如何使用Python创建并美化二元函数图像&…

pandas读取Excel表指定数值 计算总和

题目要求:在一个文件夹里面有424个Excel表格,每个表格中都是统一的,如下图。要求计算所有表格中金额的总和。 上代码: import os import glob import pandas as pd# 指定文件夹路径 folder_path C:\\Users\\Administrator\\Desk…

Salesforce“卷土重来”:对中国CRM市场影响在哪?

于本土CRM而言,Salesforce是一面镜子,也更是催化剂。 长期来看,Salesforce的加入,从某种程度上将会加速中国CRM赛道的合理价值曲线的走向,通过带动外界对于CRM整个赛道的关注和热度,进而加速本土CRM的成长…

Java学习-连接Mysql数据库

1.先在Mysql里面构建一个表格 例子:名字为user1,两列分别为name、score 2.正确导入了MySQL的JDBC驱动程序 2.1 下载驱动包(与自己的服务器版本匹配) 官网地址:Maven Repository: mysql mysql-connector-java 8.0.29 …

JVM调优:参数(学习笔记)

一、jvm的运行参数 标准参数 -help、-version、-D参数 jvm的标准参数,一般都是很稳定的,在未来的JVM版本中不会改变,可以使用java -help 检索出所有的标准参数。 通过以下命令查看: 命令:java -help 可以看到我们经常…

C与C++编程语言的区别和联系

一、引言 C和C是两种广泛使用的编程语言,它们都在软件开发领域有着广泛的应用。虽然C是从C语言演化而来的,但两者之间存在一些重要的区别和联系。本文将详细介绍这两种编程语言的相同点和不同点,并通过实际例子进行说明。 二、C与C的相同点 …

如何查看Linux中glibc的Version

用ldd --version ldd --version 运行libc.so 你没有看错,libc.so是一个可执行程序。 但前提是你要找到它。因为它并不在PATH所包含的目录下。 ppdell:~$ ldd which cat | grep libclibc.so.6 > /lib/x86_64-linux-gnu/libc.so.6 (0x00007f0e6fb34000)ppdell:~…

GPT-4.5 要来了!谷歌大模型 Gemini 确实给够压力

GPT-4 还没用明白,GPT-4.5 就要发布了。 最近,OpenAI 泄露了 GPT-4.5 的发布页面,除了进一步增强复杂推理和跨模态理解,GPT-4.5 增加了一个更加强大的功能——3D。 3D 功能的进一步支持,也就意味着多模态最后一块版图…

国产Apple Find My「查找」认证芯片-伦茨科技ST17H6x芯片

深圳市伦茨科技有限公司(以下简称“伦茨科技”)发布ST17H6x Soc平台。成为继Nordic之后全球第二家取得Apple Find My「查找」认证的芯片厂家,该平台提供可通过Apple Find My认证的Apple查找(Find My)功能集成解决方案。…

基于ssm毕业生跟踪调查反馈系统的设计与实现论文

面向工程教育专业认证的毕业生跟踪调查反馈系统 摘要 随着信息互联网购物的飞速发展,一般企业都去创建属于自己的管理系统。本文介绍了面向工程教育专业认证的毕业生跟踪调查反馈系统的开发全过程。通过分析企业对于面向工程教育专业认证的毕业生跟踪调查反馈系统…

内销开发信的跟进策略?开发信的关键要素?

如何写吸引人的内销开发信?优秀内贸开发信模板推荐? 在当今竞争激烈的市场中,内销开发信扮演着关键的角色,是吸引客户、拓展市场的重要工具。然而,发送一封内销开发信并不是终点,而是一个开始。蜂邮EDM将探…

基于Modis的遥感数据的地表温度的获取解决方案----以京津唐为例

1.背景与技术路线 地表温度(LST)是区域和全球尺度地表物理过程中的一个关键因子,也是研究地表和大气之间物质交换和能量交换的重要参数。许多应用如干旱、高温、林火、地质、水文、植被监测,全球环流和区域气候模型等都需要获得 LST。本方案以北京为例采用星载传感器的红外通道…

docker-harbor仓库

Docker 镜像 容器 仓库 仓库:保存镜像 私有:自定义用户的形式登录仓库,拉取或者上传镜像(内部管理的用户) Harbor:是VMware公司开发的,开源的企业级的docker register项目 帮助用户快速的搭建…