一文读懂TCP/IP四层模型
4.应用层:和程序相关的一层
3.传输层:负责数据从发送端到接收端
3.1 端口号分类
知名端口号
:0-1023
ftp:21 SSH:22 Telnet:23 DNS:53 http:80 HTTPS:443 MYSQL:3306 Tomcat:8080
动态端口号
:1024-65535
注: 一个端口号不可以被多个程序使用而一个程序可以有多个端口号
3.2 UDP协议
UDP协议端格式
16位UDP长度=UDP头部长度(8个字节)+数据长度
UDP一个包的最大理论长度
=2^16=65536/1024=64KB
如果UDP编程的时候数据大小大于64KB会怎样?
1.在应用层进行数据包的拆分和组合
2.大于64KB不处理,交给TCP/IP协议去处理,它会在网络层进行分包和组包(一般不这样使用,因为一旦有一个包丢失的话,将会舍弃其他所有的包)
检验和是用来确定数据在传输过程中是否被篡改,也就是用来判断数据的正确性的(假设数据是以MD5进行检验和的计算,那么原始的数据会先进行MD5得到一个值,把这个值存储在16位的检验和当中,接收端收到内容之后,按照通过的规则加密数据得到一个检验和,看是否和UDP头中的检验和一致,如果一致则数据是正确的。)
DNS、TFTP的底层是基于UDP协议的
3.3 TCP协议
URG:紧急指针
ACK:确认应答的消息
PSH:把数据立即从缓冲区里取走
RST:复位标识
SYN:同步序列号标识(TCP连接时使用)
FIN:结束序列号(TCP断开连接时使用)
重点:TCP的特性
1.确认应答
(保障TCP稳定的核心机制)
确认应答带来的问题:(1)发送消息丢失
(2)确认应答的消息丢失
2.超时重发
(保障TCP稳定)
超时重发的策略:(1)发送不会以固定的频率发送,采取的时悲观的策略,如果第一次消息发送失败,那么大概率第二次发送也会失败,所以TCP会以指数级超时时间增长的频率来发送消息
(2)如果经历的一定的重试次数,消息还没有得到应答,那么就会停止发送
3.连接管理
(保障TCP稳定)
3次握手
(两次握手不能证明客户端的接收能力和服务器的发送能力)
(四次握手能不能?可以,但是没必要)
4次挥手
(三次挥手行不行?有可能可以,如果没有待结束的任务【缓冲区没有任务】,两次挥手就可以合并【捎带应答】)
具体过程:
如果发现服务器端有大量的CLOSED_WAIT,说明程序是有问题的,没有调用close()方法
4.滑动窗口
(保证性能)
当前面的数据被正常补齐之后,返回的ACK是最大值,这种机制叫做“快重传”
5.流量控制
以结果为导向进行数据的传递
例如16位的滑动窗口位0,那么发送端就不会发消息给接收端
TCP 会以结果(接收缓冲区的大小)为导向进行数据的传递
6.拥塞控制
根据当前时间的网络来动态调整收发的频率叫拥塞控制
刚开始发送一个包,如果可以正常接收就会以指数型增加发送的数据包的数量,一直
增加到流量控制的最大值的时候,就会从指数增长变为线性增长,一直进行收发,直
到出现大量数据包丢失的时候:
1.将发送的数量改为1
2.将流量控制的最大值设置成当前丢包值/2
然后继续发包,直到成功
整个过程称为慢开始
7.延迟应答
延迟应答策略:
1.每一段时间延迟应答一次,一定程度加速发消息的速度
2.每隔n次延迟应答一次
延迟应答注意事项:
延迟应答(200ms)的时间一定要小于超时重传的时间(500ms)
8.捎带应答
针对于延时应答的性能提升
TCP协议是面向数据流的,而数据流没有边界 容易发生沾包
解决半包沾包的第一种方法【以\n作为流的边界,这样流就有边界了】
解决半包沾包的第二种方法【每次发送固定大小的流信息】
TCP异常情况处理
1.可挽救:电脑重启或结束进程时,会发送FIN请求,和正常关闭TCP没有区别
2.不能挽回:电脑掉电和网线突然中断的情况:TCP报活定时器,会定时检测对方是
否在线,如果没有响应,说明已经掉线,释放连接
基于TCP应用层协议:HTTP,SSH,TeInet,FTP,SMTP
UDP VS TCP
1.UDP 无连接 TCP有连接
2.UDP不稳定,TCP稳定
3.UDP面向数据报,TCP面向数据流
4.UDP只有接收缓冲区没有发送缓冲区,TCP二者都有
5.如果对稳定性要求比较高使用TCP,如果对消息的丢失不敏感且要求性能比较高,考虑使用UDP
面试题:怎样用UDP实现可靠传输?
答:在应用层参考TCP实现稳定性的特性来设计UDP(确认应答、超时重传、连接管理、浏览控制、拥塞控制)
2.网络层:选择合适的路径
2.1 IP协议
2.2 网段划分
IP地址由网络号和主机号组成
网络号:标识不同的网段
主机号:区分内网中的不同电脑
网络号:IP地址与子网掩码按位相与得到
子网地址取值范围:
开始值:网络号
结束值:子网掩码最后一位的最大值-开始值最后一位最大值+开始值
私网IP(内网IP):
10.*,前八位是网络号,共16777216个地址
172.16.到172.32. 前12位是网络号,共1048576个地址
192.168.*前16位是网络号,共65,536个地址
1.数据链路层:同一种数据链路节点之间进行传递数据
1.1 以太网帧格式
MTU(最大传输单元):1500字节
MTU对UDP的影响:
1500-UDP(固定头部信息8字节)-IP协议头(20字节)=1472字节
MTU对TCP的影响:
MSS和MTU的关系:
1.2 MAC地址
在网卡出厂时就确定了,不能修改,MAC地址时唯一的
1.3 ARP协议
ARP协议不是一个单纯的数据链路层的协议,是介于数据链路层和网络层之间的协议。
作用:ARP协议建立了主机IP地址和MAC地址的映射关系
一文读懂TCP/IP四层模型相关推荐
- 一文搞懂TCP/IP四层模型
一文搞懂TCP/IP四层模型 上篇介绍过了OSI七层网络模型,本文将介绍四层网络模型,七层网络模型只是理论实现,但是市面上更实际的是四层模型. 七层模型和四层模型比较 将应用层,表示层,会话层这些应用 ...
- 读懂TCP IP四层模型与OSI七层模型
目录 一.OSI七层模型 二.TCP/IP四层模型 三.OSI模型的七层解读 3.1 OSI七层模型小结 3.2 TCP/IP模型与OSI模型的对应关系 四.常见的网络相关协议 五.TCP和UDP协议 ...
- 一文读懂 TCP/IP 网络模型
本文是网络转载原文链接: https://www.toutiao.com/i6819659519954518541/? 简介 互联网是怎么构成的,又是怎么运作的?什么面试官老喜欢问 TCP/IP 网络 ...
- tcp硬件校验和rxtx开启是啥意思_一文读懂 TCP/IP 网络模型
前言 互联网是怎么构成的,又是怎么运作的?什么面试官老喜欢问 TCP/IP 网络?为什么远隔万里的计算机可以互相通信?计算机网络作为 IT 行业的基石,是工程师永远绕不开的话题. 网络的分层体系结构 ...
- Network 【TCP/IP 四层模型】
I. 协议 信号的传输总要符合一定的协议(protocol).比如说长城上放狼烟,是因为人们已经预先设定好狼烟这个物理信号代表了"敌人入侵"这一抽象信号.这样一个"狼烟= ...
- TCP/IP 四层模型
I. 协议 信号的传输总要符合一定的协议(protocol).比如说长城上放狼烟,是因为人们已经预先设定好狼烟这个物理信号代表了"敌人入侵"这一抽象信号.这样一个"狼烟= ...
- 计算机网络:浅谈HTTP与TCP/IP四层模型
计算机网络:浅谈HTTP与TCP/IP四层模型 其实对于我这样的非科班出身来说,理解算法不是最难的.最难的就是计算机网络这种无法一口吃完的内容.因此专门抽空写点这方面的内容.其实本来只是想写一篇HTT ...
- java基础巩固-宇宙第一AiYWM:为了维持生计,四大基础之计网_Part_1-1(计算机网络体系_七层模型五层模型TCP/IP四层模型、TCPUDPIP的故事【TCP三握四挥】)整起
PART1:计算机网络体系可以大致分为一下三种, 每一层有自己对应的协议,每一层都是向上一层提供服务,每个分层中所有的协议都称为协议栈 协议:网络中传输信息时的规范和规则 各层一些重要的协议 网络:通 ...
- TCP/IP四层模型、HTTP、HTTPS、TCP
文章目录 一.计算机分层模型 1.1 TCP/IP四层模型 1.1.1 四层模型的划分 1.1.2 四层模型间的数据传输 1.1.3 TCP/IP四层模型与OSI七层模型 1.2 分层模型用到的协议 ...
最新文章
- 海量数据的分库分表技术演进,最佳实践
- 经典的JAVA面试题
- 666A-Reberland Linguistics(动态规划)
- c++求小数的位数_C语言求第二小数
- ecdf与ksdensity的区别
- 最终幻想14钓鱼辅助脚本(非外挂)
- python 修改图片_Python实现批量修改图片格式和大小的方法【opencv库与PIL库】
- 以下选项中不是具体的python序列类型是_智慧树知到《大数据分析的python基础》章节测试答案...
- SYNOPSYS™光学设计软件---设计自由曲面反射系统
- 服务器虚拟连接按键精灵,服务器运行按键精灵
- 数字图像处理——图像边缘检测
- 先少谈点人工智能好吗?
- 鼠标经过文字显示隐藏图片css样式
- 码农:为什么说英语已经影响了我的命运
- 《名侦探柯南》中的“IoT恐袭”
- 知名油漆涂料品牌排行榜前十名
- JS 网页设置横竖屏切换
- it行业计算机考试认证全集
- 用idea打包项目成war最简单的方法
- 双非南京大学计算机夏令营,一名双非生的“失败”保研经历:夏令营不确定是否有保研资格,预推免上岸理想院校!...
热门文章
- vs如何把c语言编译成静态库,VS中Debug和Realease、及静态库和动态库的区别整理(转)...
- 编写程序显示4号影厅的座位图。影厅是9排座位,每排有9个座位。要求: 以方阵的形式显示座位图 没有订票的座位显示0,订票的座位显示1 每排座位左侧显示排号1-9
- 我的世界服务器修改右边浮空字,教萌新我的世界如何简单的浮空字制作技巧
- python迭代法求解方程_迭代法求解方程(组)的根
- Pytorch构建网络细节总结
- quartus ii 9.0 安装教程
- Python实现端口检测
- SQL command not properly ended
- 使用incognito重放身份验证令牌
- 绿联nas骚操作,没事帮你压测下网络