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四层模型相关推荐

  1. 一文搞懂TCP/IP四层模型

    一文搞懂TCP/IP四层模型 上篇介绍过了OSI七层网络模型,本文将介绍四层网络模型,七层网络模型只是理论实现,但是市面上更实际的是四层模型. 七层模型和四层模型比较 将应用层,表示层,会话层这些应用 ...

  2. 读懂TCP IP四层模型与OSI七层模型

    目录 一.OSI七层模型 二.TCP/IP四层模型 三.OSI模型的七层解读 3.1 OSI七层模型小结 3.2 TCP/IP模型与OSI模型的对应关系 四.常见的网络相关协议 五.TCP和UDP协议 ...

  3. 一文读懂 TCP/IP 网络模型

    本文是网络转载原文链接: https://www.toutiao.com/i6819659519954518541/? 简介 互联网是怎么构成的,又是怎么运作的?什么面试官老喜欢问 TCP/IP 网络 ...

  4. tcp硬件校验和rxtx开启是啥意思_一文读懂 TCP/IP 网络模型

    前言 互联网是怎么构成的,又是怎么运作的?什么面试官老喜欢问 TCP/IP 网络?为什么远隔万里的计算机可以互相通信?计算机网络作为 IT 行业的基石,是工程师永远绕不开的话题. 网络的分层体系结构 ...

  5. Network 【TCP/IP 四层模型】

    I. 协议 信号的传输总要符合一定的协议(protocol).比如说长城上放狼烟,是因为人们已经预先设定好狼烟这个物理信号代表了"敌人入侵"这一抽象信号.这样一个"狼烟= ...

  6. TCP/IP 四层模型

    I. 协议 信号的传输总要符合一定的协议(protocol).比如说长城上放狼烟,是因为人们已经预先设定好狼烟这个物理信号代表了"敌人入侵"这一抽象信号.这样一个"狼烟= ...

  7. 计算机网络:浅谈HTTP与TCP/IP四层模型

    计算机网络:浅谈HTTP与TCP/IP四层模型 其实对于我这样的非科班出身来说,理解算法不是最难的.最难的就是计算机网络这种无法一口吃完的内容.因此专门抽空写点这方面的内容.其实本来只是想写一篇HTT ...

  8. java基础巩固-宇宙第一AiYWM:为了维持生计,四大基础之计网_Part_1-1(计算机网络体系_七层模型五层模型TCP/IP四层模型、TCPUDPIP的故事【TCP三握四挥】)整起

    PART1:计算机网络体系可以大致分为一下三种, 每一层有自己对应的协议,每一层都是向上一层提供服务,每个分层中所有的协议都称为协议栈 协议:网络中传输信息时的规范和规则 各层一些重要的协议 网络:通 ...

  9. TCP/IP四层模型、HTTP、HTTPS、TCP

    文章目录 一.计算机分层模型 1.1 TCP/IP四层模型 1.1.1 四层模型的划分 1.1.2 四层模型间的数据传输 1.1.3 TCP/IP四层模型与OSI七层模型 1.2 分层模型用到的协议 ...

最新文章

  1. 海量数据的分库分表技术演进,最佳实践
  2. 经典的JAVA面试题
  3. 666A-Reberland Linguistics(动态规划)
  4. c++求小数的位数_C语言求第二小数
  5. ecdf与ksdensity的区别
  6. 最终幻想14钓鱼辅助脚本(非外挂)
  7. python 修改图片_Python实现批量修改图片格式和大小的方法【opencv库与PIL库】
  8. 以下选项中不是具体的python序列类型是_智慧树知到《大数据分析的python基础》章节测试答案...
  9. SYNOPSYS™光学设计软件---设计自由曲面反射系统
  10. 服务器虚拟连接按键精灵,服务器运行按键精灵
  11. 数字图像处理——图像边缘检测
  12. 先少谈点人工智能好吗?
  13. 鼠标经过文字显示隐藏图片css样式
  14. 码农:为什么说英语已经影响了我的命运
  15. 《名侦探柯南》中的“IoT恐袭”
  16. 知名油漆涂料品牌排行榜前十名
  17. JS 网页设置横竖屏切换
  18. it行业计算机考试认证全集
  19. 用idea打包项目成war最简单的方法
  20. 双非南京大学计算机夏令营,一名双非生的“失败”保研经历:夏令营不确定是否有保研资格,预推免上岸理想院校!...

热门文章

  1. vs如何把c语言编译成静态库,VS中Debug和Realease、及静态库和动态库的区别整理(转)...
  2. 编写程序显示4号影厅的座位图。影厅是9排座位,每排有9个座位。要求: 以方阵的形式显示座位图 没有订票的座位显示0,订票的座位显示1 每排座位左侧显示排号1-9
  3. 我的世界服务器修改右边浮空字,教萌新我的世界如何简单的浮空字制作技巧
  4. python迭代法求解方程_迭代法求解方程(组)的根
  5. Pytorch构建网络细节总结
  6. quartus ii 9.0 安装教程
  7. Python实现端口检测
  8. SQL command not properly ended
  9. 使用incognito重放身份验证令牌
  10. 绿联nas骚操作,没事帮你压测下网络