TCP/IP协议基础

news2024/12/23 9:57:13

1.TCP/IP模型的分层

在这里插入图片描述

  • 网络接口层(Network Interface Layer):(数据链路层)
    功能:
    ①将数据帧发送到物理网络,并从物理网络接收数据帧。
    ②处理硬件地址,如MAC地址。
    主要协议:Ethernet、Wi-Fi、PPP等。

  • 网络层(Internet Layer):
    功能:数据包的路由和寻址,以便将数据包传递到目标主机。
    主要协议:IP协议是网络层的核心协议,还有其他的协议,如ICMP、ARP等。

  • 传输层(Transport Layer):
    功能:数据的分段和重新组装,以及数据的可靠传输。
    主要协议:TCP、UDP。

  • 应用层(Application Layer):
    功能:提供网络应用程序与传输层之间的接口。
    主要协议:HTTP、FTP、SMTP、DNS、SSH等。

2.TCP头

  0                   1                   2                   3
  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |          Source Port          |       Destination Port        |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |                        Sequence Number                        |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |                    Acknowledgment Number                      |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |  Data |           |U|A|P|R|S|F|                               |
 | Offset| Reserved  |R|C|S|S|Y|I|            Window             |
 |       |           |G|K|H|T|N|N|                               |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |           Checksum            |         Urgent Pointer        |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |                    Options                    |    Padding    |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |                             data                              |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

其中各字段的含义如下:

源端口号(Source Port)和目的端口号(Destination Port):用于标识发送方和接收方的应用程序。在TCP连接建立时,双方需要交换各自的端口号。

序号(Sequence Number):用于标识TCP数据流中的每个字节。每个TCP数据段都有一个序号,表示本段数据的第一个字节在整个数据流中的位置。

确认号(Acknowledgment Number):用于确认接收方已经正确接收到了发送方发送的数据。确认号表示接收方期望下一个接收的字节的序号。

数据偏移(Data Offset):指定TCP头部的长度,以4个字节为单位。取值范围为0~15,表示TCP头部长度为0 - 60字节。

控制标志(Flags):包括6个标志位,分别为URG、ACK、PSH、RST、SYN和FIN,用于控制TCP连接的建立、维护和关闭。

Flags含义
URG(URGent)本数据段中包含紧急数据,紧急指针指明紧急数据的位置
ACK(ACKnowledgment)确认号有效,确认接收方已正确接收到发送方发送的数据
PSH(PuSH)表示数据应该立即被推送给应用程序,而不是在接收到更多数据后再推送
RST(ReSeT)表示连接重置,用于中断异常连接
SYN(SYNchronization)表示建立连接的请求,用于TCP三次握手。
FIN(FINish)表示关闭连接,用于TCP四次挥手

窗口大小(Window Size):表示发送方能够接收的数据量大小。发送方根据窗口大小来决定发送的数据量。

校验和(Checksum):用于检测TCP头部和数据的正确性。发送方在发送数据时计算校验和,并将其放在TCP头部中。
接收方在接收数据时同样计算校验和,并将其与TCP头部中的校验和进行比较,以判断数据是否正确。

紧急指针(Urgent Pointer):用于标识TCP数据段中的紧急数据。如果URG标志被设置,那么紧急指针指定的字节表示紧急数据的最后一个字节的位置。

选项(Options):TCP头中还可以包含一些可选字段,如时间戳、最大分段大小(MSS)等。这些选项的使用是可选的,取决于具体实现。

3.IP头(IPV4)

每行32位,4字节
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Version|  IHL  |Type of Service|          Total Length         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|         Identification        |Flags|      Fragment Offset    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Time to Live |    Protocol   |         Header Checksum       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       Source Address                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    Destination Address                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    Options                    |    Padding    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

IP头是Internet协议(IP)中用于封装传输数据的头部信息,包含了IP协议中一些重要的控制信息。下面是IP头中各字段的具体含义:

- 版本(Version):指定IP协议的版本号,IPv4的版本号为4,IPv6的版本号为6。

- 首部长度(Header Length):指定IP头部长度,以4个字节为单位。取值范围为0~ 15,表示IP头部长度为0~60字节。

- 区分服务(Differentiated Services,DS):用于对IP数据包进行分类和区分处理,以实现不同服务等级的提供。

- 总长度(Total Length):指定整个IP数据报(包括头部和数据)的长度,以字节为单位。

- 标识(Identification):用于标识一个IP数据报的唯一性,由发送方生成。

- 标志位(Flags):用于标识IP数据报的一些属性。

  • DF(Don’t Fragment):表示该数据报不允许被分片。
  • MF(More Fragments):表示该数据报是一个分片,并且还有其他分片未到达目的地。

- 分段偏移(Fragment Offset):用于标识分段数据包相对于原始IP数据包中的位置。

- 生存时间(Time to Live,TTL):指定IP数据包在网络中可以经过的最大跳数。
每经过一个路由器,TTL值会减1,当TTL值为0时,数据包将被丢弃。

- 协议(Protocol):指定上层协议类型,如TCP、UDP、ICMP等。

- 头部校验和(Header Checksum):用于检测IP头部的正确性。
发送方在发送数据时计算头部校验和,并将其放在IP头部中。
接收方在接收数据时同样计算头部校验和,并将其与IP头部中的校验和进行比较,以判断数据是否正确。

- 源IP地址(Source Address)和目的IP地址(Destination Address)
用于标识发送方和接收方的IP地址。
在IP数据包经过网络传输时,每个路由器都会根据目的地址进行转发。

4.三次握手(3-way handsherk)和四次挥手 (4-way wavehand)

TCP/IP协议的三次握手和四次挥手,即建立和关闭TCP连接,可以确保数据传输的可靠性和完整性。

三次握手的过程如下:
在这里插入图片描述

  1. 第一步(SYN):客户端发送一个SYN包给服务器端,并且该包中包含了客户端初始化序列号的值。此时,客户端处于SYN_SENT状态。

  2. 第二步(SYN-ACK):服务器端收到SYN包后,返回一个SYN-ACK包,该包中包含了服务器端初始化序列号的值和对客户端序列号的确认。此时,服务器端处于SYN_RCVD状态。

  3. 第三步(ACK):客户端收到SYN-ACK包后,发送一个ACK包作为对服务器端的确认。此时,客户端处于ESTABLISHED状态,而服务器端则从SYN_RCVD状态转变为ESTABLISHED状态。

四次挥手的过程如下:
在这里插入图片描述

  1. 第一步(FIN):当客户端想要关闭连接时,它发送一个FIN包给服务器端,表明它不再发送数据。此时,客户端进入FIN_WAIT_1状态。

  2. 第二步(ACK):服务器端收到FIN包后,返回一个ACK包确认。此时,服务器端进入CLOSE_WAIT状态,而客户端处于FIN_WAIT_2状态。

  3. 第三步(FIN):当服务器端也想要关闭连接时,它发送一个FIN包给客户端,表明它不再发送数据。此时,服务器端进入LAST_ACK状态,等待客户端的确认。

  4. 第四步(ACK):客户端收到FIN包后,返回一个ACK包确认。此时,客户端进入TIME_WAIT状态,并且等待2MSL时间(两倍的最大报文存活时间)后,关闭连接。服务器端收到ACK包后,进入CLOSED状态。

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

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

相关文章

[独家]自动播放K线图训练盘感能力!股票量化分析工具QTYX-V2.3.5

K线量价的重要性 K线图对炒股的朋友来说太熟悉不过了,每一根K线包含了开盘价、收盘价、最高价和最低价这四个价位信息,分别用红和绿两种颜色来表示上涨或下跌,反映了单位时间周期内价格变动的情况。 不过K线的功效可不仅仅用来记录价格的变动…

Linux信号:信号 信号集 信号集函数

1. 信号的概念 Linux进程间通信的方式之一。信号也称为“软件中断”。 信号特点: 简单;携带信息有限;满足特定条件才发送信号;可进行用户空间和内核空间进程的交互; 信号4要素: (1&#xf…

根据Java的TreeMap源码的原理编写C++红黑树删除操作

(一)了解二叉搜索树的删除操作 删除操作总结: ******普通结点删除:******* ①删除叶结点 ②删除只有1个子结点的结点 >>如果被删除结点的左子树为空,则令其右子树子承父业代替其位置即可 >>如果被删除结点…

JPA整合达梦数据库

陈老老老板🦸 👨‍💻本文专栏:国产数据库-达梦数据库(主要讲一些达梦数据库相关的内容) 👨‍💻本文简述:本文讲一下SpringBoot整合JPA与达梦数据库,就是简单&…

《算法工程师带你去》读书笔记

什么是稀疏向量(向量的稀疏表示) 对数据进行预处理时,一般需要对类别型特征进行编码: 序号编码独热编码 二进制编码 其中独热编码用的是最多的。但是当类别数十分巨大时,独热编码是一个非常稀疏的向量,只有…

IDEA(八)常用插件推荐

目录 1.GitHub Copilot2.MyBatisCodeHelperPro3.Maven Helper4.Translation5.Api Savior6.Alibaba Java Coding Guidelines7.Sequence Diagram8.Key Promoter X9.Restfultoolkit-fix 在IDEA中,Ctrl Alt S 选择 Plugins,可以添加很多帮助我们开发的插件…

Arduino串口提取数字(整型和浮点型)

数据提取 文章目录 数据提取前言一、提取整型数据二、提取浮点型数据 前言 之前需要用32和ESP进行通信上传数据,一直都用的都是数据上传然后处理成整型数据,今天需要处理成浮点型数据所以就查了一下,于是就记录一下。 一、提取整型数据 #i…

〖Python网络爬虫实战⑳〗- 数据存储之CSV操作实战

订阅:新手可以订阅我的其他专栏。免费阶段订阅量1000 python项目实战 Python编程基础教程系列(零基础小白搬砖逆袭) 说明:本专栏持续更新中,目前专栏免费订阅,在转为付费专栏前订阅本专栏的,可以免费订阅付…

JDBC数据库连接技术学习笔记

1. 概述 本笔记是学习尚硅谷教育的23版jdbc的课后笔记 1.1 JDBC概念和理解 1. jdbc是(Java Database Connectivity)单词的缩写,翻译为java连接数据库 2. jdbc是java程序连接数据库的技术统称 3. jdbc由java语言的规范(接口)和各个数据库厂商的实现驱动(jar)组成 4. jdbc是一…

Mysql 判断语句

目录 5 判读 5.1 if ... then ...->示例演示 局部变量 -> 打包储存过程 5.2 case 5.2.1 语法一 5.2.2 语法二 -> 示例演示 5.3 while 循环 ->有条件循环 5.3.1 示例演示 5.4 repeat 循环 -> 满足条件 -> 退出循环 5.4.1 示例演示 5.5 loop 5.5.1…

【c语言小项目】基于easyX的俄罗斯方块

EeayX是针对 C/C 的简单图形库插件,本项目基于easyX游戏框架下实现俄罗斯方块游戏。 俄罗斯方块功能实现中主要运用了二维数组的循环遍历。能够实现基本功能,暂未实现旋转 c语言系列专栏:c语言之路重点知识整合 更多相关:c语…

AI VS 好莱坞?新时代电影工作流;MJ制作微信表情包的麻瓜教程;关于ControlNet的一切;AI创业真钱景 | ShowMeAI日报

👀日报&周刊合集 | 🎡生产力工具与行业应用大全 | 🧡 点赞关注评论拜托啦! 🤖 『OpenAI通过了一大批GPT-4申请』大量放号ing~快去看邮箱! 🤖 『小马智行 | 广州南沙区开启车内无安全员的自动…

opencv-python加载pytorch训练好的onnx格式线性回归模型

opencv是一个开源的图形库,有针对java,c,python的库依赖,它本身对模型训练支持的不好,但是可以加载其他框架训练的模型来进行预测。 这里举一个最简单的线性回归的例子,使用深度学习框架pytorch训练模型,最后保存模型为…

【软考备战·希赛网每日一练】2023年4月28日

文章目录 一、今日成绩二、错题总结第一题第二题第三题 三、知识查缺 题目及解析来源:2023年04月28日软件设计师每日一练 一、今日成绩 二、错题总结 第一题 解析: 大体了解即可,题目要考察的核心意思:确定的有限自动机和不确定的…

js 操作数组内容

js 操作数组内容 数组添加元素(更改原数组) push和unshift会返回添加了新元素的数组长度 push从数组最后加入,unshift从数组最前面加入 const arr ["a", "b", "c"]; arr.push("d"); //返回4…

数据结构基础day9

题目&#xff1a;187. 重复的DNA序列 解法1&#xff1a;哈希表 class Solution { public:vector<string> findRepeatedDnaSequences(string s) {vector<string> ans;unordered_map<string, int> mp;int ns.size(), L10;for(int i0; i<n-L; i){ //从开头…

【fluent UDF】warning: unused variable警报:存在未使用的变量

一、问题背景 在编译UDF时&#xff0c;出现如下错误 curing_heat_v3.c: In function ‘iter_ending’: curing_heat_v3.c:105:14: warning: unused variable ‘volume_sum’ [-Wunused-variable] real volume_sum0.0; curing_heat_v3.c:104:14: warning: unused variable ‘…

【Python零基础学习入门篇②】——第二节:Python的常用语句

⬇️⬇️⬇️⬇️⬇️⬇️ ⭐⭐⭐Hello&#xff0c;大家好呀我是陈童学哦&#xff0c;一个普通大一在校生&#xff0c;请大家多多关照呀嘿嘿&#x1f601;&#x1f60a;&#x1f618; &#x1f31f;&#x1f31f;&#x1f31f;技术这条路固然很艰辛&#xff0c;但既已选择&…

网络编程之简单socket通信

一.什么是Socket? Socket&#xff0c;又叫套接字&#xff0c;是在应用层和传输层的一个抽象层。它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用以实现进程在网络中通信。 socket分为流socket和数据报socket&#xff0c;分别基于tcp和udp实现。 SOCK_STREAM 有以下…

苦学58天,最后就这结果......

背景 非计科大专一枚&#xff0c;当初学的机械自动化专业。大学完全可以说是玩过来的&#xff0c;临近毕业开始慌了&#xff0c;毕业后一直没能找到工作&#xff0c;在高中同学&#xff08;211 计科&#xff09;的引领下&#xff0c;入坑程序员&#xff0c;学的软件测试。 从…