搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
Cpp五条
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
HTTP、Tomcat、Nginx、前后端分离开发_nginx tomcat
2
实战 | 用Python和OpenCV搭建一个老人跌倒智能监测系统 (步骤 + 源码)_python摔倒检测
3
电商项目day19(秒杀功能实现)
4
Python3 df.loc和df.iloc函数用法及提取指定行列位置处数值_df.loc用法
5
python GUI编程(tkinter)基于adb 编写安卓助手_python tk/ttk制作 安卓群控助手
6
论文阅读笔记:Hetero-ConvLSTM: A Deep Learning Approach to TrafficAccident Prediction
7
路径规划-A*(C++实现)_c++实现a*算法
8
Springboot农产品销售管理系统的设计与实现 57457 (免费领源码、附论文)可做计算机毕业设计JAVA、PHP、爬虫、APP、小程序、C#、C++、python、数据可视化、大数据、全套_基于springboot的农产品展销平台与设计
9
HTTP协议之post multipart/form-data数据类型实例_httppost multipart/form-data
10
Python筛选处理Excel的两种方法(openpyxl与pandas)_python按要求过滤excel
当前位置:
article
> 正文
TCP/IP协议详解_tcp/ip协议 数据格式
作者:Cpp五条 | 2024-03-10 01:59:39
赞
踩
tcp/ip协议 数据格式
认识
IP
地址
概念
IP
地址(
Internet Protocol Address
)是指互联网协议地址,又译为网际协议地址。
作用
IP
地址是
IP
协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。
格式
IP
地址是一个
32
位的二进制数,通常被分割为
4
个
“8
位二进制数
”
(也就是
4
个字节),如:
01100100.00000100.00000101.00000110
。
通常用
“
点分十进制
”
的方式来表示,即
a.b.c.d
的形式(
a,b,c,d
都是
0~255
之间的十进制整数)。如:100.4.5.6。
组成
IP
地址分为两个部分,网络号和主机号
网络号
:
标识网段
,保证相互连接的两个网段具有不同的标识;
主机号
:
标识主机
,同一网段内,主机之间具有相同的网络号,但是必须有不同的主机号;
子网掩码
格式
子网掩码格式和
IP
地址一样,也是一个
32
位的二进制数。其中左边是网络位,用二进制数字
“1”
表示,
1的数目等于网络位的长度;右边是主机位,用二进制数字“0”
表示,
0
的数目等于主机位的长度。
子网掩码也可以使用二进制所有高位
1
相加的数值来表示
。
作用
(1)划分
A
,
B
,
C
三类
IP
地址子网:
如一个
B
类
IP
地址:
191.100.0.0
,按
A ~ E
类分类来说,网络号二进制数为
16
位网络号
+16
位主机号。
假设使用子网掩码
255.255.128.0
(即
17
) 来划分子网,意味着划分子网后,高
17
位都是网络位
/
网络 号,也就是将原来16
位主机号,划分为
1
位子网号
+15
位主机号。
此时,
IP
地址组成为:网络号
+
子网号
+
主机号,网络号和子网号统一为网络标识(划分子网后的网络
号
/
网段)
计算方式
将
IP
地址和子网掩码进行
“
按位与
”
操作(二进制相同位,与操作,两个都是
1
结果为
1
,否则为
0
),得 到的结果就是网络号。 将子网掩码二进制按位取反,再与 IP
地址位与计算,得到的就是主机号。
认识
MAC
地址
MAC
地址,即
Media Access Control Address
,用于标识网络设备的硬件物理地址。
主机具有一个或多个网卡,路由器具有两个或两个以上网卡;其中每个网卡都有唯一的一个
MAC
地址。
网络通信,即网络数据传输,本质上是网络硬件设备,将数据发送到网卡上,或从网卡接收数据。
硬件层面,只能基于
MAC
地址识别网络设备的网络物理地址。
总结
IP
地址和
MAC
地址
IP
地址描述的是
路途总体的起点和终点
;是给人使用的网络逻辑地址。
MAC
地址描述的是路途上的每一个区间的起点和终点,即
每一跳的起点和终点
;是给网络硬件设
备使用的网络物理地址。
TCP
协议
TCP
,即
Transmission Control Protocol
,传输控制协议。人如其名,要对数据的传输进行一个详细的控制。
TCP
协议段格式
源
/
目的端口号:表示数据是从哪个进程来,到哪个进程去;
32
位序号
/32
位确认号;
4
位
TCP
报头长度:表示该
TCP
头部有多少个
32
位
bit
(有多少个
4
字节);所以
TCP
头部最大长度是 15 * 4 = 60
6
位标志位
:
URG
:紧急指针是否有效
ACK
:确认号是否有效
PSH
:提示接收端应用程序立刻从
TCP
缓冲区把数据读走
RST
:对方要求重新建立连接;我们把携带
RST
标识的称为
复位报文段
SYN
:请求建立连接;我们把携带
SYN
标识的称为
同步报文段
FIN
:通知对方,本端要关闭了,我们称携带
FIN
标识的为
结束报文段
16
位窗口大小
16
位校验和:发送端填充,
CRC
校验。接收端校验不通过,则认为数据有问题。此处的检验和不
光包含
TCP
首部,也包含
TCP
数据部分。
16
位紧急指针:标识哪部分数据是紧急数据;
40
字节头部选项;
TCP
原理
TCP
对数据传输提供的管控机制,主要体现在两个方面:安全和效率。
这些机制和多线程的设计原则类似:保证数据传输安全的前提下,尽可能的提高传输效率。
确认应答机制(安全机制)
每一个
ACK
都带有对应的确认序列号,意思是告诉发送者,我已经收到了哪些数据;下一次你从哪里开始发。
超时重传机制(安全机制)
主机
A
发送数据给
B
之后,可能因为网络拥堵等原因,数据无法到达主机
B
;
如果主机
A
在一个特定时间间隔内没有收到
B
发来的确认应答,就会进行重发;
连接管理机制(安全机制)
滑动窗口(效率机制)
对每一个发送的数据段,都要给一个
ACK
确认应答。收到
ACK
后再发送 下一个数据段。这样做有一个比较大的缺点,就是性能较差。尤其是数据往返的时间较长的时候。
既然这样一发一收的方式性能较低,那么我们一次发送多条数据,就可以大大的提高性能(其实是将多个段的等待时间重叠在一起了)。
流量控制(安全机制)
接收端处理数据的速度是有限的。如果发送端发的太快,导致接收端的缓冲区被打满,这个时候如果发送端继续发送,就会造成丢包,继而引起丢包重传等等一系列连锁反应。
因此
TCP
支持根据接收端的处理能力,来决定发送端的发送速度。这个机制就叫做
流量控制(
Flow
Control
)
;
拥塞控制(安全机制)
虽然
TCP
有了滑动窗口这个大杀器,能够高效可靠的发送大量的数据。但是如果在刚开始阶段就发送大量的数据,仍然可能引发问题。
因为网络上有很多的计算机,可能当前的网络状态就已经比较拥堵。在不清楚当前网络状态下,贸然发送大量的数据,是很有可能引起雪上加霜的。
TCP
引入
慢启动
机制,先发少量的数据,探探路,摸清当前的网络拥堵状态,再决定按照多大的速度传输数据;
少量的丢包,我们仅仅是触发超时重传;大量的丢包,我们就认为网络拥塞;
当
TCP
通信开始后,网络吞吐量会逐渐上升;随着网络发生拥堵,吞吐量会立刻下降;
拥塞控制,归根结底是
TCP
协议想尽可能快的把数据传输给对方,但是又要避免给网络造成太大压力的折中方案。
延迟应答(效率机制)
如果接收数据的主机立刻返回
ACK
应答,这时候返回的窗口可能比较小。
假设接收端缓冲区为
1M
。一次收到了
500K
的数据;如果立刻应答,返回的窗口就是
500K
;
但实际上可能处理端处理的速度很快,
10ms
之内就把
500K
数据从缓冲区消费掉了;
在这种情况下,接收端处理还远没有达到自己的极限,即使窗口再放大一些,也能处理过
来;
如果接收端稍微等一会再应答,比如等待
200ms
再应答,那么这个时候返回的窗口大小就是
1M
;
捎带应答(效率机制)
在延迟应答的基础上,我们发现,很多情况下,客户端服务器在应用层也是
"
一发一收
"
的。意味着客户端给服务器说了 "How are you"
,服务器也会给客户端回一个
"Fine, thank you"
;
那么这个时候
ACK
就可以搭顺风车,和服务器回应的
"Fine
,
thank you"
一起回给客户端
如何避免粘包问题?
对于定长的包,保证每次都按固定大小读取即可;例如上面的
Request
结构,是固定大小
的,那么就从缓冲区从头开始按
sizeof
(
Request
)依次读取即可;
对于变长的包,可以在包头的位置,约定一个包总长度的字段,从而就知道了包的结束位
置;
对于变长的包,还可以在包和包之间使用明确的分隔符(应用层协议,是自己来定的,只要保证分隔符不和正文冲突即可);
UDP
协议
UDP
协议端格式
16
位
UDP
长度,表示整个数据报(
UDP
首部
+UDP
数据)的最大长度;
如果校验和出错,就会直接丢弃;
UDP
的特点
UDP
传输的过程类似于寄信。
无连接
知道对端的
IP
和端口号就直接进行传输,不需要建立连接;
不可靠
没有任何安全机制,发送端发送数据报以后,如果因为网络故障该段无法发到对方,
UDP
协议层也不会给应用层返回任何错误信息;
面向数据报
应用层交给
UDP
多长的报文,
UDP
原样发送,既不会拆分,也不会合并;
用
UDP
传输
100
个字节的数据:
如果发送端一次发送
100
个字节,那么接收端也必须一次接收
100
个字节;而不能循环接收
10
次,
每次接收
10
个字节。
缓冲区
UDP
只有接收缓冲区,没有发送缓冲区:
UDP
没有真正意义上的
发送缓冲区
。发送的数据会直接交给内核,由内核将数据传给网络层协议
进行后续的传输动作;
UDP
具有接收缓冲区,但是这个接收缓冲区不能保证收到的
UDP
报的顺序和发送
UDP
报的顺序一
致;如果缓冲区满了,再到达的
UDP
数据就会被丢弃;
UDP
的
socket
既能读,也能写,这个概念叫做
全双工
大小受限
UDP
协议首部中有一个
16
位的最大长度。也就是说一个
UDP
能传输的数据最大长度是
64K
(包含
UDP
首部)。
基于
UDP
的应用层协议
NFS
:网络文件系统
TFTP
:简单文件传输协议
DHCP
:动态主机配置协议
BOOTP
:启动协议(用于无盘设备启动)
DNS
:域名解析协议
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/Cpp五条/article/detail/216948
推荐阅读
article
普通人
如何
在
抖音
赚
到
钱
:策略路线规则突破
赚
钱
...
通过与众不同的内容,吸引更多的观众关注和分享,进而提高曝光度和
赚
钱
机会。总结起来,要
在
抖音
上
赚
到
钱
,你需要创造独特的内容...
赞
踩
article
【
Python
】详解
str
、
list
、
dict
相互
转换
_
dict
writer[
str
]...
一
、
转换
为字符串;二
、
转换
为列表;三
、
转换
为字典;四
、
其他_
dict
writer[
str
]
dict
writer[
str
]...
赞
踩
article
MYSQL
中常见
DDL
语句_
mysql
查看
ddl...
MYSQL
中常见
DDL
语句总结_
mysql
查看
ddl
mysql
查看
ddl
DDL
:对数据库...
赞
踩
article
linux
内核
异步
io
,
linux
A
IO
-- liba
io
实现的
异步
IO
简介及实现原理...
1.
linux
A
IO
—liba
io
实现的
异步
IO
POSIX
A
IO
是在用户控件模拟
异步
IO
的功能,不需要
内核
支持,而lin...
赞
踩
article
Jenkins
远程
执行
shell
命令(用户密码方式)_
jenkins
执行
x
shell
脚本不需...
介绍环境_
jenkins
执行
x
shell
脚本不需要密码嘛
jenkins
执行
x
shell
脚本不需要密码嘛 ...
赞
踩
article
POI导出
Excel
错误THE
MAXIMUM
COLUMN
WIDTH
FOR AN INDIV...
int orgColWidth = (arrColWidth[column.Ordinal] + 1); ...
赞
踩
article
Jenkins
自动
构建部署
项目
到远程
服务器
上...
1.下载jenkins下载地址:https://jenkins.io/启动jenkins方式有2种1.1切换到jenki...
赞
踩
article
ASP
.NET
在线
考试
系统
的
设计
与
实现
(论文+源码)_Nueve...
前言随着网络技术的飞速发展,现在很多国外的大学和社会其他部门都已经开设了远程教育,通过计算机网络
实现
异地教育和培训。现在...
赞
踩
article
Java
高校学校校园
排课
系统设计与实现(
Idea
+
Springboot
+
mysql
)...
Java
高校学校校园
排课
系统设计与实现(
Idea
+
Springboot
+
mysql
)毕设毕业设计源代码,黄菊华老师《Vu...
赞
踩
article
python
图像处理
基础知识
(
cv
库函数说明)_
python
cv
...
python
图像处理
基础知识
,函数说明目录
python
图像处理
基础知识
,函数说明1.处理照片(open_
cv
库)1.1 ...
赞
踩
article
如何
搭建
一个基于
spigot
的
minecraft
插件
服务器
_
spigot
官网...
直接搬自我自己
的
文章http://nerveplexus.tooo.top/?p=61
spigot
插件
服和纯净服
的
区别仅...
赞
踩
article
腾讯
云
轻量
服务器
流量
用完了
怎么办
?停机吗?...
腾讯
云
轻量
服务器
流量
用完了
怎么办
?超额
流量
另外支付
流量
费,
流量
价格为0.8元/GB,会自动扣你的
腾讯
云
余额,如果你的
腾讯
...
赞
踩
article
PyTorch
(14)
---
使用现有的
模型
及其修改_
pretrained
=
true
...
使用现有的
模型
及其修改_
pretrained
=
true
pretrained
=
true
...
赞
踩
article
2023-
6
-
13
-
IP
配置
知识补充学习...
在
配置
IP
时,需要
配置
以下几个参数:1.
IP
地址:是一个32位的二进制数字,用于标识计算机在网络中的位置。2. 子网掩...
赞
踩
article
SpringBoot
项目中
spring
-
boot
-
maven
-
plugin
插件的作用是什么?_spr...
在
SpringBoot
项目中,框架提供了一套自己的打包机制,是通过
spring
-
boot
-
maven
-
plugin
插件来...
赞
踩
article
使用
Pritunl
OpenVPN
远程
连接
:实现安全高效
的
远程
访问...
Pritunl
是一款免费开源
的
VPN 平台软件(但
使用
的
不是标准
的
开源许可证,用户受到很多限制)。这是一种简单有效
的
V...
赞
踩
article
windows
下查找
my
sql
配置文件
my
.
ini
_win
my
sql
admin.exe
my
.
ini
...
select @@datadir;_win
my
sql
admin.exe
my
.
ini
win
my
sql
admin.exe ...
赞
踩
article
合约
实现
ERC20
的转入转出_
ierc20
transfer
selector
...
这篇文章主要展示如何用合约
实现
ERC20
的转入转出功能。主要
实现
方式是声明I
ERC20
接口,然后在合约中用
ERC20
...
赞
踩
article
Pytorch
预
训练
模型
加载、修改
网络结构
并固定某层
参数
训练
、不同层采用不同的
学习
率_预
训练
模型
如...
一、
Pytorch
中state_dict()、named_parameters()、model.parameter()区...
赞
踩
article
使用U盘
安装
银河
麒麟
服务器
操作系统
V10SP2
出现“
设置
基础
软件
仓库时出错”报错导致无法继续
安装
的解...
使用U盘
安装
银河
麒麟
服务器
操作系统
V10SP2
出现“
设置
基础
软件
仓库时出错”报错导致无法继续
安装
的解决方法_
设置
基础
软件
...
赞
踩
相关标签
python
数据库
mysql
sql
linux 内核 异步io
java
jenkins
自动部署项目
asp.net
后端
php
c++
c语言
git
windows
高校学校校园排课系统
信号处理
算法
机器学习
图像处理
minecraft
centos
linux
腾讯云