TCP/IP 与OSI 七层模型

以上为 网络OSI 七层协议模型

  • 物理层

    • 网络传输中最底层负责数据传输的物理硬件, 这里相当与以太网或者电话线等物理设备,可以模糊定义其为数据传输过程中的实际物理媒介
  • 数据链路层
    • 数据链路层, 利用以太网中的数据链路进行通信, 属于接口层, 主要为常见的网卡驱动程序, 起到操作系统和硬件之间的桥梁作用, 计算机上的网卡等相关外设不是直接插入就可以使用, 还需要对应的网卡驱动程序.
  • 网路层
    • 网络层中协议, 互联网中基于IP地址转发包数据
    • ICMP, IP数据包仔发送途中一旦发生异常, 导致无法达到对短目标的时候需要给发送端发一个异常通知, ICMP 为这一功能定制, ping 便是基于ICMP
    • ARP从分组数据包的IP地址中解析出MAC地址
  • 传输层
    • 传输层的最主要的功能实现应用程序之间通信, 计算机之间运行着多个程序,因此必须要分清哪些进程在进行通信, 识别这些通信的凭证是端口号
    • TCP 是面向链接的传输层协议,保证两端主机间的通信可达, 并正确处理传输中的丢包, 包乱序等情况, 后续展开详解
    • UDP 与TCP 不同, 面向无链接的协议, 不关心对方是否真实的受到了数据, 常用于广播通信,视频通信等
  • 会话层及往上的协议
    • http/ssh/telnet/smtp/ftp 等具体应用APPLICATION

基于IP/TCP 的包传输data封装

data 传输过程中的层层封装

TCP 协议详解

  • 通俗概念: TCP 是一种面相连接的可靠传输协议, 只有在确认对端通信正常的情况下才会发送数据包
  • TCP 报文格式
TCP 报文格式图
    • 32bit, 出去保留项的格式, 总体长度为20字节, 加上保留项最大不超过60字节
    • 源端口:16bit, 位指名报文返回端的端口号
    • 目的端口: 16bit, 端口指明接收方计算机上的应用程序接口
    • 序列号: 32bit, 表明本报文段第一个字节的序号,用来保证数据传输的有序性, 稳定传输的关键部分
    • 数据偏移: 4bit, 因为TCP 头部还有保留项的内容, 故TCP 头部长度是不定的, 定义偏移量来表明TCP 头部最终的长度, 最大值 1111 = 1 + 2 + 4 + 8 = 15, 15 * 32 / 8 = 60, 也就表明TCP 头部最大不超过60字节
    • 保留: 6bit, 暂时为0 , 保留为新功能时使用
    • URG: 1bit, 紧急指针标志, 为1时表示紧急指针有效,为0则忽略紧急指针
    • ACK: 1bit, 确认标志, 1 有效, 0 忽略
    • PSH: 1bit, 带有PUSH的数据, 接收方获取到数据后, 应该立即交给应用程序, 而不走缓冲
    • RST: 1bit, 连接重置接口, 由于外部原因导致连接奔溃, 或者遇到非法字段的时候, 进行重连的接口
    • SYN: 1bit, 建立连接, 1时表明要建立连接
    • FIN: 1bit, 释放l连接, 1时表明要断开连接
    • 窗口: 16bit, TCP 窗口,最大值65535, 即表明TCP 窗口最大支持65535
    • 校验和: 16bit 对整个报文(包含头部), 发送端进行计算, 并由服务端验证
    • 紧急指针: 16bit, URG 生效(置为1时), 该值也是一个偏移量, TCP 紧急发送
    • 保留项: 可选数据内容, 具体长度由${偏移量} - 20字节决定, 最大长度时60字节
    • 数据: TCP 报文中承载的用户数据, 可以为空, 如HTTP/FTP
  • 建立稳定连接:三次握手
    • TCP是面向连接的可靠传输协议, 所以为了保证能够有稳定连接, 客户端和服务端需要通过三次通信过程来确认客户端和服务端已经建立了稳定连接, 具体过程如下:
三次握手
  • 稳定断开连接: 四次挥手
四次挥手
  • 连接状态: [如上图展示]

    • 客户端状态转换:

      • 建立连接时: CLOSED->SYN_SENT->ESTABLISHED
      • 断开连接时: FIN_WAIT_1->FIN_WAIT_2->TIME_WAIT->CLOSED
      • 客户端在断开连接时会在TIME_WAIT 状态中持续2MSL(最大报文段生存时间), 之后将状态切换为CLOSED
    • 服务端连接状态转换
      • 建立连接时: CLOSED->LISTEN->SYN_RECEIVED->ESTABLISHED
      • 断开连接时:CLOSE_WAIT->LAST_ACK->CLOSE
  • 问题:
    • 为什么要三次握手而不是两次?

      • 由上面的三次握手的图可以知道, 在两次握手后, 服务端已经连接准备就序, 但是服务端还需要知道客户端已经连接就绪, 即第三次握手, 这样才能保证有效连接
    • 为什么要四次挥手?
      • 在连接状态下, 如果客户端要和服务端断开连接, 为了保证数据不丢失, 服务端只能先给客户端发送一个ACK, 因为这个时候不能确定服务端给客户端需要传输的所有数据已经传输完毕, 所以不能立即关闭, 等待服务端确认所有数据发送完毕, 这个是时候才能给客户端发送断开连接的请求, 并等待确认关闭连接
    • 为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能返回到CLOSE状态?
      • 发送中, 要一定程度的确保服务端在确认断开连接的ACK 发送给服务端成功, 如果立即断开连接, 服务端很肯能收不到关于FIN的ACK , 这个时候服务端可能hang在LAST_ACK, 并不断的给客户端发FIN。2MSL是报文的最大存活时间, 如果这个时间还能收到FIN, 说明上个ACK发送失败, 需要重发
  • 消息可靠性: 序列号+ 确认应答
    • 当发送端发送数据到达目的主机时, 目的主机会返回一个已收到的消息通知(ACK), 这个返回机制叫确认应答, 同时返回下一个需要接受的数据的序列号,证明当前数据已经接受准确, 使客户端能确认该块数据已经被成功发送,避免不断重复发送的情况
服务端与客户端进行正常连接
  • 在正常的连接中, TCP 通过确认应答 + 对应的序列号, 来保证每个数据包都成功的发送给服务端, 服务端也能保证每个数据都发送到服务端
客户端数据丢失的情况
  • 当客户端传输数据出现丢失的情况时, 服务端没能收到客户端传输的数据包, 同时客户端在一段特定的时间间隔内没有收到客户端反回来的确认应答,这个时候客户端尝试重新发送数据給服务端, 服务端在收到客户端的数据后进行返回给客户端, 保证该数据包能够正常传输
服务端确认应答丢失情况
    • 当客户端能正确的把数据发送给, 服务端, 服务端在返回数据的时候出现了丢包的情况, 此时客户端会在一定的时间间隔内没有收到服务端返回的确认应答, 客户端认为当前数据出现了丢包, 此时客户端尝试再次重新发送数据給服务端,服务端应答給客户端保证数据稳定传输
    • 一定的时间间隔: 上文说到有一定的时间间隔, 如果没有一定的时间间隔的话,会引起客户端大量数据重发, 同时会导致网络拥堵极端情况下可能造成网络奔溃, 在Unix系统中, 超时都是一0.5 位单位进行控制, 超时后收不到应答, 则进行再次发送, 此时应答时间会以2, 4倍的指数形式增长, 同时数据不会无限的重发, 到达一定的充实次数后。如果还是没有收到任何应答, 则判定网络或者对端主机发生了异常, 强制关闭连接, 并通知应用程序通信异常, 连接终止.
  • 传输效率控制: 滑动窗口 + 拥塞控制
    • 在上面的描述中, 消息传输时通过确认应答来保证每次数据完成传输, 当上一个数据块完成传输并确认后才会继续传输下一个数据包, 很显然这是一个串行的传输结构, 实际TCP中为了提高传输速率, 引入了窗口控制的机制
    • 窗口控制的基本原则是一次并行发送多个TCP数据包, 等待服务端去确认应答, 在服务端完成确认应答后再次发送多个TCP数据包, 其中一次发送数据包的个数就是窗口大小, 如下图展示的窗口大小为4:
    • 假定一个数据传输的窗口大小为4, 前三个数据包已经收到来自服务端的确认应答, 那么此时还有第四个数据包在等待应答, 此时窗口的位置可以移动到等待确认应答的位置, 从而提高效率, 该机制也被叫做滑动窗口机制
TCP 滑动窗口

注:在窗口控制中, 如果1,2,3,4,窗口最后以个之前的某个数据发送没有确认应答, 那么后面的也不会重发, 但是当某一段报文丢失后, 客户端会一直收到丢失报文的前一个序列的报文的应答, 用来告诉客户端服务端真实需要的数据, 如果连续收到三次相应的确认应答, 将会对其所在的报文进行重发。

  • 拥塞控制

    • 拥塞控制是TCP在数据传输过程中, 通过调整窗口大小获取最佳传输速率的一个过程, 如果太大可能会造成网络拥堵, 如果太小怎传输速率不佳
    • TCP 为了防治出现该类问题, 通过慢启动的算法得出最佳窗口值
    • 慢启动解释: 为了调节所要发送的数据量, 定义了拥塞窗口的概念, 在慢启动时, TCP将窗口设置为1个数据段(1MSS), 之后每收到一次确认应答, 窗口值+1, 在客户端发包时, 将拥塞窗口的大小和接收端主机通知的窗口大小比较, 选取较小的值, 此时会触发拥塞窗口指数指数级增长, 为了防止这个问题, 在引入慢启动阈值的概念, 只要拥塞窗口的值超过这个阈值, 后续每次收到确认应答时, 只能按照特定比例放大窗口: 1个数据段的字节数/ 拥塞窗口(字节) * 1个数据字节的个数, TCP在通信开始的时候没并没有设置这个值,在触发超时重发的时候会将阈值设置为拥塞窗口一般的大小

ssh协议是osi_TCP/IP 协议模型相关推荐

  1. ssh协议是osi_TCP/IP协议和三次握手四次挥手

    计算机网络体系结构 在计算机网络的基本概念中,分层次的体系结构是最基本的.计算机网络体系结构的抽象概念较多,在学习时要多思考.这些概念对后面的学习很有帮助. 网络协议是什么? 在计算机网络要做到有条不 ...

  2. 网络通信——ISO7层协议与TCP/IP 四层模型

    ISO7层协议与TCP/IP 四层模型 前言 1. ISO7层协议 2.TCP/IP四层模型 3.两者之间的关联 前言 参考链接:原文链接 1. ISO7层协议 ISO7层模型从第一层至第七层: 物理 ...

  3. 在哪里查看计算机配置的网络协议簇,tcp/ip协议簇

    TCP/IP协议簇是Internet的基础,也是当今最流行的组网形式.TCP/IP是一组协议的代名词,包括许多别的协议,组成了TCP/IP协议簇.其中比较重要的有SLIP协议.PPP协议.IP协议.I ...

  4. 计算机原理---什么叫协议?主流协议族TCP/IP协议与HTTP协议的联系及区别

    文章目录 一. 背景 1. 名词定义 2. 协议选择 3. 常用协议 二. 协议协议,究竟什么是协议? 1.举个例子 2.计算机网络一般分为5层 应用层 传输层 网络层 数据链路层 物理层 三.总结 ...

  5. 【网络协议】TCP/IP 协议

    1.TCP/IP 模型 TCP/IP 协议模型,包含了一系列构成互联网基础的网络协议,是 Internet 的核心协议. 基于 TCP/IP 协议栈可分为四层或五层,转换为 OSI 参考模型,可以分为 ...

  6. 最详细的http协议、tcp/ip协议

    推一下自己的文章: Git详细使用命令 https://blog.csdn.net/qq_41517936/article/details/98780052 微信小程序开发 --- 每天的学习进度   ...

  7. ipx/spx协议与tcp/ip协议

    网络协议(Protocol)是一种特殊的软件,是计算机网络实现其功能的最基本机制.网络协议的本质是规则,即各种硬件和软件必须遵循的共同守则.网络协议并不是一套单独的软件,它融合于其他所有的软件系统中, ...

  8. 协议分析---TCP/IP协议和邮件协议

    协议分析-TCP/IP协议和邮件协议 一.TCP/IP 1.TCP/IP参考模型概述 1.1 常见不同层使用的协议   应用层:Telnet.FTP.TFTP.SNMP.HTTP.SMTP.NFS.D ...

  9. 网络中的七层协议与TCP/IP五层模型

    socket(套接字)是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元,包含进行网络通信必须的五种信息:连接使用的协议,本地主机的IP地址,本地进程的协议端口,远地主机的IP地址,远地进程 ...

最新文章

  1. failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
  2. DNS枚举工具DNSenum
  3. windows mobile C# net3.5 如何捕捉Arrow的CheckBox的KeyDown事件?
  4. git 添加未跟踪的文件
  5. 邹建老大写的经典SQL
  6. Redis 如何实现限流功能?
  7. SQL Server 修改表
  8. [SpriteKit] 制作瓦片地图小游戏
  9. 【Strategy模式】C++设计模式——策略模式
  10. Matlab利用gca设置图像属性(线型,字号,颜色)
  11. Access Key / Secret key 密钥安全原理架构
  12. 四川企立方电商:拼多多团长是不是免费的
  13. 微信小程序开始时间,结束时间
  14. Aspose.Words模板创建Word【一】
  15. Tcp连接时三次握手的问题和思考
  16. 解决WebService部署时出现的“未能创建类型...”错误
  17. 使用 http://tempuri.org/ 作为默认命名空间
  18. 微波遥感6:侧视雷达图像
  19. python数据挖掘实战笔记——文本挖掘(9):相似文章推荐
  20. 从微软官网下载windows10系统并制作启动盘

热门文章

  1. 4000字超干货!《统计学习方法》啃书指南(1)
  2. 【干货】Github标星1.2K,Visual Transformer 最全最新资源,包含期刊、顶会论文
  3. 跟随美国博导12年,我学到最深刻的不是科研,而是……
  4. 改改 Python 代码,运行速度还能提升 6 万倍,Science:先别想摩尔定律了
  5. 推荐一款常用的IDE插件,越用越喜欢
  6. 骚操作 !用 Python 偷偷抓取女朋友的行踪(女朋友在哪里)
  7. Mysql高级调优篇——第五章:Sql调优在面试中深度剖析
  8. Django博客系统(用户中心展示)
  9. Seq2Seq实现闲聊机器人
  10. celery中间件:broker