作者:MobMsg,资深全端工程师一枚,架构师社区合伙人!


TCP/IP 协议族

Internet 的核心协议就是 TCP/IP,广泛应用于局域网和广域网,目前已有20+年发展史,是现用国际通行标准。TCP/IP 是个协议族,包含有多种协议,网络模型及分层如图所示

TCP/IP 协议族全家福


TCP/IP 五层网络模型

应用层:应用程序通过TCP/IP互连网络后发送、接收数据。选择所需服务类型,按照传输层要求组织数据,向下传递报文序列或字节流2种类型

传输层:提供应用层间通信服务,又称端到端通信。提供可靠的数据传输服务,确保数据准确、有序送达到目的地。数据发送后需对方回送确认信息,有丢失的数据需发送方重发分组。传输的对象是传输层分组

网际层:又称IP层,负责机器间通信,接收到传输层请求后,向目的地传送信息分组。此分组会被封装进IP数据报中,由路由选择算法决定直送目的地或发给路由,然后将数据向下传递给网络接口层。接收到数据报时,检验正确性,由路由选择算法决定本地处理或转发,若目的地属于本机所在网络,就把数据报的报头剥去,选择适当的传输层协议向上传递分组

网络接口层:又称数据链路层,处于TCP/IP协议层之下,负责接收IP数据报并将数据报通过选定网络发送出去

硬件层:处理连接网络的硬件部分。包括控制操作系统、硬件的设备驱动、NIC(Network Interface Card,网络适配器,即网卡),及光纤等 物理可见部分(还包括连接器等一切传输媒介)


TCP/IP 内含协议职责

应用层协议职能


TCP 协议数据传输流程

传输控制协议(Transmission Control Protocol,TCP)是 Internet 传输层协议,提供面向连接的可靠传输服务,可靠性由重发技术保证。TCP 报文首部的大小一定是4字节的倍数,其中固定首部大小为20字节且不变

TCP 数据包示意图

ACK:确认位,当它的值为1时,确认号才是有效的

TCP 三次握手建立连接

第一次握手:建立连接时,客户端发送SYN包(syn=i)到服务器,并进入SYN_SEND状态,等待服务器确认。SYN表示同步序列编码(Synchronize Sequence Numbers)

第二次握手:服务器收到syn包,必须确认客户的SYN(ack=i+1),同时自己也发送一个SYN包(seq=j),即SYN+ACK包,此时服务器进入SYN_RECV状态

第三次握手:客户端收到服务器的SYN+ACK的包后,向服务器发送确认包ACK(j+1),此包发送完毕,客户端与服务器进入ESTABLISHED状态,完成三次握手

三次握手建立连接示意图

TCP 正常数据传输过程

本图表示传输2个数据报的过程。主机A向B发送第一个 N 字节的数据包,SEQ为 i ,主机B收到后需要立即向主机A发送确认ACK包,ACK = i + N +1 ,这样主机A才可确认数据传输成功。第二个数据包传输时,SEQ数值 = R,主机B收到后立即回传ACK,此时ACK = R + N + 1,之后数据包传输的过程持续此流程,需要注意的是发送方只有收到目标方的确认包后才会清除缓冲区中的数据

ACK确认位 = SEQ数据编号 + 传递的字节数N + 1。第一个字节的SEQ编号由本地随机产生,SEQ+N的作用是为了让主机A确认发送给主机B的数据是否全部接收 / 是否出现丢失

正常数据传输示意图

TCP 数据重传与快重传

  • 数据重传:主机A向主机B传送数据,但中间发生错误,主机B未能收到。经过一段时间后,主机A未收到主机B的ACK确认包,故主机A再次重传此数据包。主机A每次发送数据时都会启动一个定时器,规定时间没收到响应包则启动重传

  • 快重传:重传发生在超时之后,但当主机A收到3个以上重复的ACK,其实就说明有数据丢失,也需要重传,此时重传定时器还没有结束,所以叫快速重传

数据重传示意图

TCP 四次挥手结束连接

第一次挥手:客户端发送一个FIN,用来关闭客户端到服务器的数据传送,客户端进入FIN_WAIT_1状态

第二次挥手:服务端收到FIN后,发送一个ACK给客户端,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),服务端进入CLOSE_WAIT状态

第三次挥手:服务端发送一个FIN,用来关闭服务端到客户端的数据传送,服务端进入LAST_ACK状态

第四次挥手:客户端收到FIN后,客户端进入TIME_WAIT状态,接着发送一个ACK给服务端,确认序号为收到序号+1,服务端进入CLOSED状态,完成四次挥手

四次挥手结束连接示意图

TCP 滑动窗口与拥塞控制


IP 协议数据传输流程

网际协议(Internet Protocol,IP)通常被认为提供的是无连接和不可靠的,但实际上,在网络性能良好的情况下,IP传送的数据能够完好无损的到达目的地

无连接是指没有确定目标系统是否已做好接收数据的准备之前就发送数据。不可靠是指目的系统不对成功完成接收到的分组进行确认

IP 数据报示意图

IP 发送数据

发送数据时,源计算机上的IP协议需要确定目的地是否在同一网络,若目的地在同一网络,使用直达通信,若不在同一网络,则需要通过网关或路由器完成通信:

主机A组装目的IP地址为主机B的数据报,之后进行路由选择,再将次数据报发送至默认路由器(由APR地址解析确定路由器,得到下一默认路由器IP地址与MAC地址的映射关系,然后以该MAC地址为帧的目的地址形成一个帧,并将IP数据报封装在帧的数据区,最后由具体的物理网络(以太网)完成数据报的真正传输)

IP 转发数据

路由器接收到主机A的数据帧后,去掉帧头并对其进行处理,发现此数据报的目的地非本地,需要将其转发,由路由选择算法及本地路由表确定下一跳路由器地址,通过ARP地址解析确定下一跳路由的IP地址与MAC地址的映射关系后,将该MAC地址作为数据帧的目的地将数据报封装为数据帧,通过以太网完成数据转发。重复此步骤直到第N个路由器与目的地直连,通过ARP地址解析确定目的主机的IP地址与MAC地址的映射关系,利用该MAC地址作为帧的目的地址,将IP数据报封装成帧,并由以太网实现数据的真正传递

IP 接收数据

主机B接收到数据帧后,解封该帧并对其进行处理,确定本机即为目的地址后,将数据报中封装的数据交由上层协议进行处理,随即逐层处理并上交直到应用层,完成此次通信


TCP/IP 五大重要特性

逻辑编址:通过IP地址+主机ID,确保计算机可寻

路由选择:通过网络路径选择协议,确保数据包到达目的地

域名解析:将域名映射为IP地址,使用域名一是便于记忆,二是域名相对固定不变

错误检测:确保分组交换的可靠性传递,确认数据正常接收

流量控制:监测网络流量,防止网络拥塞出现

长按订阅更多精彩▼

如有收获,点个在看,诚挚感谢

计算机网络原理梳理丨清晰认识 TCP/IP 协议,图解秒懂!相关推荐

  1. 一文讲透TCP/IP协议 | 图解+秒懂+史上最全

    目录

  2. 原理 msc_计算机网络原理梳理丨无线与移动网络

    目录 无线网络 移动网络 IEEE802.11 蜂窝网络 移动IP网络 其它典型无线网络介绍 无线网络 无线网络的基本结构 无线主机 无线链路 基站 网络基础设施 自组织网络(Ad Hoc网络) 无线 ...

  3. 数字通信原理_计算机网络原理梳理丨物理层

    目录 数据通信基础 物理介质 信道与信道容量 基带传输 频带传输 物理层接口规程 数据通信基础 关键词概念解析 消息:人类能够感知的描述 信息:对事物的存在状态或存在方式的不确定性表述,可度量 通信: ...

  4. 网络基础之计算机网络参考模型(OSI参考模型与TCP/IP协议簇)

    文章目录 前言 一.OSI七层参考模型 1.OSI简介 2.OSI参考模型各层的功能 二.TCP/IP协议簇 1.TCP/IP 2.常用的网络协议 三.数据封装和解封装 1.数据封装过程 2.数据解封 ...

  5. 【计算机网络】网络基础知识和TCP/IP协议族

    一.计算机网络产生 二.概要----七层 三.计算机使用模式的演变 四.OSI参考模型 五.OSI参考模型中各个分层的作用 六.OSI参考模型----通信处理举例 七.网络的构成要素 八.TCP/IP ...

  6. 计算机网络基础:OSI模型与TCP/IP协议的关系

    数据来源 一.分层模型 1)分层思想(把复杂的事情简单化) 通信需要 --> 定义协议标准 完成每一件事,需要的协议太多,怎么办 ?分层,分工合作 将复杂的流程分解为几个功能相当单一的子流程 - ...

  7. 计算机网络——TCP/IP协议网络原理

    摘要 本博文主要是介绍的计算机网路中基础知识.这个技术包括了网络中硬件相关的知识,帮助大家更好的理解计算机网络.同时也是对基础概念的巩固学习.​​​​​​​ 常用的网络协议 (1)TCP/IP协议 T ...

  8. 计算机网络参考模型(OSI七层与TCP/IP协议)

    目录 1 为什么要分层 1.1 层次划分的必要性 1.2 层次划分的方法 1.2 层次划分的优点 2 七层和四层的定义 2.1 七层的介绍 2.1.1 OSI七层参考模型 2.1.2 OSI七层工作原 ...

  9. 计算机网络中的OSI模型和TCP/IP模型

    在计算机网络工程中,我们总听过有几层几层的,有的说七层,有的说五层.其实就算我们不清楚每层是什么,也应该听过有分什么应用层.物理层啊啥的.本篇就详细的讲述一下,关于计算机网络的这些所谓的层都是怎么来的 ...

最新文章

  1. 独家 | 6种让Python程序变慢的坏习惯
  2. 高频一线大厂 Python 面试题:算法+爬虫+数据处理+基础
  3. Hive表路径修改和分区表数据加载命令
  4. AOJ GRL_1_C: All Pairs Shortest Path (Floyd-Warshall算法求任意两点间的最短路径)(Bellman-Ford算法判断负圈)
  5. PageHelpe的分页不起作用
  6. 语音网关典型配置实例
  7. 只需1分钟,这个网站用AI分离歌曲的人声、伴奏和乐器声
  8. Scrum 敏捷项目管理
  9. 2012r2备域控服务器搭建,Windows Server 2012 R2域控制器部署
  10. linux图片卡通处理,Linux下声卡通 (转)
  11. python弹球游戏实验报告_Python游戏练习之弹球示例
  12. 谷歌电子邮件服务器,谷歌Gmail为什么会能一统美国电邮服务
  13. 深度分解服务业细分领域O2O
  14. 不同范数下的余弦定理_用向量证明余弦定理是否存在逻辑错误?
  15. Excel 每N个取平均值
  16. 传出神经系统分为哪两类,传出神经的分类与功能
  17. Dagger2 依赖注入之@Provides 分析
  18. 浏览器 pad android,腾讯发布 QQ浏览器 HD for Android Pad,加速布局手机浏览器
  19. 【时间序列分析】AR模型公式总结
  20. $con= MySQL有关填空题_mysql练习题和答案.docx

热门文章

  1. 交换网络中的sniffer讨论-基于交换网络的ARP spoofing sniffer
  2. C#类与结构体究竟谁快——各种函数调用模式速度评测
  3. [Forward] 因为火炬,所以迟到,工资照扣
  4. 前端技术周刊 2018-12-03:DOM
  5. Optaplanner终于支持多线程并行运行 - Multithreaded incremental solving
  6. DataV:可视化大屏展示神器实战分享
  7. Zabbix如何监控Windows机器
  8. c++ memcpy与strcpy的比较
  9. SignalR的使用
  10. 回到地球之后,这个男人创建了Ubuntu