当前位置:网站首页>TCP/IP四层模型中的重点网络协议
TCP/IP四层模型中的重点网络协议
2022-07-19 11:16:00 【半夏而凉】
目录
应用层重点协议
DNS
DNS是一整套从域名映射到IP的系统。
TCP/IP中使用IP地址来确定网络上的一台主机,但是IP地址不方便记忆,且不能表达地址组织信息,于是人们发明了域名,并通过域名系统来映射域名和IP地址。
域名是一个字符串,如 www.baidu.com
NAT
NAT能够将私有IP对外通信时转为全局IP(也就是局域网ip转公网ip)
NAPT
那么问题来了,如果局域网内,有多个主机都访问同一个外网服务器,那么对于服务器返回的数据中,目的IP都是相同的。NAPT的作用就是将局域网的IP+port转为公网的IP+port
HTTP/HTTPS
HTTP及HTTPS是应用层重点协议,我将单独写一篇文章。
传输层重点协议
TCP协议
TCP,即Transmission Control Protocol,传输控制协议。就是对数据的传输进行一个详细的控制。
TCP协议段格式
端口号:网络传输流程封装会使用的字段
其他字段:TCP原理会使用的字段
6位标志位:Boolean值,0/1数据
URG:紧急指针是否有效
ACK:申请建立连接,应答
PSH:提示接收端立刻从缓存区读走
RST:对方要求重新建立连接,复位报文段
SYN:请求建立连接,同步报文段
FIN:申请断开连接,结束报文段
TCP原理
TCP对数据传输提供的管控机制,主要体现在两个方面:安全和效率。
原则:保证数据传输安全的前提下,尽可能的提高传输效率。
可靠(安全)机制
(1)确认应答机制
发送端发送数据,接收端需要返回接收到数据报的应答。
数据会进行编号,并使用32位序号保存,下一个数据报就是接收到的数据报连续序号的最大值+1,也就代表之前的数据报全部接收到了。
(2)超时重传机制
发送端超过一定时间,没有收到ack应答包,就会进行重传。
有两种情况,第一种就是发送数据包丢失,还有一种就是ack应答包丢失。当重传到达一定的次数,就表示对方出现异常,关闭连接 。
(3)连接管理机制
在正常情况下,TCP要经过三次握手建立连接,四次挥手断开连接。
三次握手建立连接
- 客户端发送syn----申请建立客户端到服务端的连接
- 服务端返回syn+ack----syn是申请建立服务端到客户端的连接,ack是对第一个数据报的应答,可以合并一起发,也可以分开发。
- 客户端返回ack----对第二个数据报syn的应答
四次挥手断开连接
- 客户端发送fin到服务端----申请关闭客户端到服务端的连接
- 服务端返回ack----服务端状态置为close_wait
- 服务端发送fin到客户端----申请关闭服务端到客户端的连接(客户端收到,状态置为time_wait)
- 客户端返回ack----服务端收到状态置为closed(客户端等待一段时间,状态置为closed)
注:客户端接收到第三个数据报,不能马上置为close,还要给服务端发送应答,否则可能出现丢包(服务端无法断开连接),服务端就会根据超时重传机制,重发第三数据报,此时客户端已经是closed了
(4)流量控制机制
接收端处理数据的速度是有限的。如果发送端发的太快,导致接收端的缓冲区被打满,这个时候如果发送端继续发送,就会造成丢包,继而引起丢包重传等等一系列连锁反应。因此TCP支持根据接收端的处理能力,来决定发送端的发送速度。
接收端主动告诉发送端自己的窗口大小(TCP首部16位窗口字段)
(5)拥塞控制机制
在不清楚当前网络状态下,贸然发送大量的数据,是很有可能引起雪上加霜的。TCP引入 慢启动机制,先发少量的数据,探探路,摸清当前的网络拥堵状态,再决定按照多大的速度传输数据。也就是发送端在刚开始发送数据时要用拥塞窗口探路。少量的丢包,我们仅仅是触发超时重传;大量的丢包,我们就认为网络拥塞。
效率机制
(1)滑动窗口机制
以并行的方式发送数据报,减少等待时间,提高效率。
窗口大小:指的就是无需等待确认应答而可以发送数据的最大值,窗口越大,网络的吞吐率就越高。
操作系统内核为了维护这个滑动窗口,需要开辟发送缓存区来记录当前还有哪些数据没有应答,只有确认过应答的数据,才能从缓存区删掉。
但是如果出现了丢包该如何重传?这里分两种情况讨论
第一种:数据报已抵达,ack丢了
没影响,后续的ack也能表示序号前的全部被接收了
第二种:发送的数据报丢包
接收端接收到的连续序号最大值+1(如果中间有部分没接收到,序号就不连续)
连续三次接收到下一个是XXX,就表示从XXX开始丢的数据报,需要重传,也叫快重传。
(2)延迟应答机制
接收端返回的流量窗口,不是立即返回,而是等待一定的时间,这样返回的流量窗口就可能更大(窗口越大,吞吐量就越大,效率就越高)
(3)捎带应答机制
不管是客户端还是服务端,都既可以是发送端也可以是接收端,不管客户端还是服务端,接收到数据时,返回的ack应答包,可以和发送的数据报合并一起发送给对方。
粘包问题
“包”指的是应用层的数据包
避免粘包:明确包和包之间的边界
- 固定包的大小:读写都按照固定的大小来发送/接收
- 可变长度的包:发送时包含长度的信息,接收到就按照这个信息读取相应大小的数据
UDP协议没有粘包问题:因为UDP协议是面向数据报,发送数据是一整块一整块法,不存在粘包问题。
UDP协议
UDP协议与TCP协议对比
UDP | TCP |
无连接 | 有连接 |
不可靠 | 可靠 |
面向数据报 | 面向字节流 |
只有接收缓存区(只管发,不管是否丢包,所以没有发送缓存区) | 接收和发送缓存区都有 |
大小受限 | 大小不限 |
适用场景:实时性要求高,允许少量丢包 | 适用场景:可靠性比较高的地方 |
网络层重点协议
IP协议
协议头格式
数据链路层重点协议
认识以太网
以太网:局域网的一种技术标准
以太网帧:协议格式(在数据链路层封装数据报的格式)
认识MTU
以太网的最大传输单元,超过以太网规定的最大限制,就会进行分包/分片
对ip协议的影响:
超出mtu限制,就会在网络层进行分片,就可能存在零件丢包的问题(接收端收到的多个小包,如果部分丢失,那整个包都没用)
对udp的影响:
小包丢包,接收端拿到也无法还原,整个udp数据报就没用
对tcp的影响:
小包丢包,接收端拿到还是无法还原,但tcp有可靠机制来保证数据重发
ARP协议
ARP不是一个单纯的数据链路层的协议,而是一个介于数据链路层和网络层之间的协议。
ARP协议建立了主机 IP地址 和 MAC地址 的映射关系。
边栏推荐
- [depth] the new LAAS agreement elephant: the key to revitalizing the development of the defi track
- 4.5 design idea of nodejs automatic test 2
- iPhone 14 Max生产进度落后:或影响首批产品出货配比
- 推荐一个 curl 命令转化为PHP代码的网站&&在线发起执行 curl 请求的网站
- vivo官网APP全机型UI适配方案
- 字符函数和字符串函数(二)
- Use of ADB debugging tools
- process.env
- 4.5 nodejs自动化测试设计思路2
- Tutor marriage matchmaking, this doctoral couple: a total of 15 papers for a work, leaving school to teach!
猜你喜欢
朱松纯团队最新突破登Science头条!让AI「读懂」人类价值观
Tutor marriage matchmaking, this doctoral couple: a total of 15 papers for a work, leaving school to teach!
Leetcode selected top interview questions_ character string
[depth] the new LAAS agreement elephant: the key to revitalizing the development of the defi track
step num 问题
人均瑞数系列,瑞数 4 代 JS 逆向分析
iPhone 14 Max生产进度落后:或影响首批产品出货配比
【Latex】PPT画图,导出emf格式,word插入emf文件并导出pdf,pdf裁剪并导出eps文件,latex插入eps文件
sprigboot中过滤器执行顺序源码解读
The core of livedatabus is so simple
随机推荐
TypeScript 基础 — interface 中的函数和属性
STM3(cubeIDE)点灯实验
4.5 nodejs自动化测试设计思路2
Web: compiling big refactoring from 10 to 1
Xinlaifu Xincai IPO meeting: annual revenue of 780million, with 47% equity held by Wang Xiaoming
Cooperatively Coevolving Particle Swarms forLarge Scale Optimization
【单片机】51单片机烧录那些事儿
arm反汇编 之数组
Android面试Hash原理详解二
阿里热更新Sophix的故事
Cloud Native (36) | Introduction et installation de Harbor à kubernets
SourceTree推送时没有远程分支
SeasLog 与 monolog 日志系统的区别,SeasLog安装步骤[通俗易懂]
【PPT】连续使用箭头等工具,避免多次重复选择,提升效率
MySync——企点通用MySQL数据同步解决方案
LiveDataBus核心原来如此简单
SSL与TLS到底有何区别,一见分晓
Alibaba hot updates the story of sophix
IEC61131地址表示
step num 问题