文章目录

  • 前言
  • 数据链路层
  • 网络层
  • 传输层
    • 1.TCP协议(Transmission Control Protocol,传输控制协议)
    • 2.UDP协议(User Datagram Protocol,用户数据包协议)
    • 3.SCTP协议(Stream Control Transmission Protocol,流控制传输协议)
  • 应用层
  • 通信流程
    • 1.发送数据的过程
    • 2.接收数据的过程

教程推荐:

人工智能教程,点击这里查看,通俗易懂,风趣幽默

C/C++教程,点击这里查看,以项目为主导从入门到精通

前言

TCP/IP协议族是一个四层协议系统

从下到上分别为数据链路层网络层传输层应用层

每一层都通过若干协议实现完成不同的功能,且上层协议使用到下层协议的服务

数据链路层

数据链路层实现了网卡接口的网络驱动程序,处理数据在物理媒介上的传输,并隐藏了各个物理媒介之间的区别,为上层协议提供了统一的接口。

数据链路层使用到的两个常用协议为ARP(Address Resolve Protocol,地址解析协议)协议和RARP(Reverse Address Resolve Protocol,逆地址解析协议)协议

这两个协议实现了ip地址和机器物理地址之间的转换(通常为MAC地址)

作用:

网络层是通过ip寻址的,而数据链路层只能通过物理地址寻址,因此网络层需要先将ip地址通过ARP协议转换为物理地址才能使用物理链路层提供的服务。而RARP仅用于某些无盘工作站,因缺少存储设施,无法存储ip地址,则可以使用RARP协议,通过物理地址向管理员查询自己的ip地址

网络层

通常网络上的两台主机之间不是直接相连接的,两种之间存在多个中间节点(路由器)。网络层的作用就是在众多的节点中选择中间节点,使两台主机能够通信,确定两台主机的通信路径。

同时,网络层向上层隐藏了网络拓扑结构的细节,使得在传输层和应用层看来,通信双方是直接连接到一起的。

网络层最核心的协议是ip协议(Internet Protocol,因特网协议)。IP协议根据数据包的目的地ip决定如何投递,如果数据包不能直接发送给目标主机,那么ip协议就为它寻找下一个合适的路由器进行跳转,并将数据包交给该路由器,多次重复直到数据包最终到达目标计算机,或者由于发送失败而被丢弃。

总结来说,ip协议就是通过逐跳(hop by hop)的方式确定通信路径

网络层另一个重要的协议是ICMP(Internet Control Message Protocol,因特网控制报文协议),它是ip协议的重要补充,主要用来检测网络连接

比如我们常用的ping命令确定两台主机之间是否能够通信,就是采用的该协议

报文格式如图:


8位类型用于区别报文类型,它将ICMP报文区别分为了两大类

一类是差错报文,主要用来回应网络错误,比如目标不可(3)到达和重定向(5)

另一类是查询报文,用来查询网络信息,比如ping命令中就使用的查看目标是否可达(8)

有的ICMP报文还使用8位代码段来进一步细分,比如重定向报文(5)中,使用代码值0表示网络重定向,代码之1表示对主机重定向

16位校验和字段用于对整个报文(包括头部和内容)进行循环冗余校验(Cyclic Redundancy Check,CRC),以及检验报文是否在传输过程中是否损坏。

需注意的是,ICMP协议并非严格意义上的网络层协议,因为它使用了同一层的IP协议提供的服务

传输层

传输层为两台主机上的应用提供端到端(end to end)的通信。

与网络层不同的是,传输层只关心通信的起始端和目的端,而不在乎数据包的中转过程

传输层主要协议有三个,TCP协议,UDP协议和SCTP协议

1.TCP协议(Transmission Control Protocol,传输控制协议)

目的是为应用层提供可靠的面向连接的、和基于流的服务。TCP协议使用了超时重传、数据确认等方式确保数据包被正确的发送至目的地,使得其可靠。

使用TCP协议通信的双方必须先建立TCP连接,并在内核中为该连接维持一些必要的数据结构,比如连接状态、读写缓存区,以及定时器等。

通信结束,双方必须关闭连接来释放这些内核数据。

2.UDP协议(User Datagram Protocol,用户数据包协议)

该协议与TCP协议完全相反,它为应用层提供不可靠、无连接和基于数据包的服务

这意味着,UDP协议无法保证数据可以正确的传输到目的端,如果数据在中途丢失,或目的端通过数据校验发现数据错误而将其丢弃,UDP协议只会简单的通知应用程序发送失败。

同时由于处于无连接状态,所以每次发送数据都需要明确指定接收端的地址(IP 和端口等)

需要注意的是,每个UDP数据报都有一个长度,接收端必须以该长度为最小单位将所有内容一次性读出,否则数据将被截断。

3.SCTP协议(Stream Control Transmission Protocol,流控制传输协议)

这是一种比较新的传输层协议,为在因特网上传输电话信号而设计。

应用层

应用层负责处理应用程序的逻辑,比如文件传输、名称查询和网络管理等,所以工作在用户层。而数据链路层、网络层和传输层负责处理网络通信细节,这部分必须稳定而高效,因此它们都在内核空间中实现。

应用层协议有很多,比如:

  • telnet协议,一种远程登录协议,它使我们能在本地完成远程任务。
  • OSPF协议(Open Shortest Path First,开放最短路径优先),是一种动态路由协议更新协议,用于路由器之间的通信,以告诉对方各自的路由信息
  • DNS协议(Domain Name Service,域名服务),提供机器域名到IP地址的转换

注意ping是应用程序,而不是协议,它利用了ICMP报文检测网络连接,是调试网络环境的必备工具

通信流程

1.发送数据的过程

首先,上层协议如何利用到下层协议提供到的服务呢?答案就是封装

如图,当在应用层需要发送一段数据时,就需要将该数据通过协议栈从上往下依次传递,同时每一层协议都会在上一层数据的基础上加上自己的头部信息

比如我们常见的TCP/UDP协议,在接收到我们要发送的数据时,就会在我们要发送的数据前面加上自己的头部信息,这就是封装。


以TCP为例,如图,经过TCP协议封装后的数据称为TCP报文段(TCP message segment)或简称TCP段。

上面说到,TCP协议会在内核中存储相关数据,为通信双方维持一个连接,这部分数据中就有TCP头部信息和TCP内核缓存区(发送缓存区和接收缓存区),一同构成TCP报文段,如图虚线所示。

当你在应用程序中调用send(或write)函数发送数据时,内核中的TCP模块首先会把这些数据复制到与当前连接对应的TCP内核发送缓存区中,然后TCP模块调用下层的IP协议服务,将TCP报文段(TCP头部信息和TCP发送缓存区中的数据)作为参数传入。

IP层接收到了上层的数据(TCP报文段),再次进行封装,过程与TCP相同,经IP封装后的的数据叫做IP数据报(IP datagram),并再次将封装好的数据IP头部 TCP头部 要发送的数据)传入下一层:数据链路层

经有上面同样的过程,数据链路层再进行一次封装,加入对应的头部信息,封装后的数据称为帧(frame),需要注意的是,根据传输介质的不同,帧的类型也不相同,比如以太网上传输的称为以太网帧,令牌环网络传输的称为令牌环帧

以以太网帧为例,封装细节如图:

以太网帧使用6字节的目的物理地址和源物理地址来表示通信双方,2字节类型,和要传输的数据(IP头部,TCP头部,数据),以及最后的CRC(循环冗余校验)

可以看到,再以太网中,帧最多能携带的上层数据为1500个字节,这就意味着,过长的IP数据报需要被分片传输。帧是最终在物理网络上传送的字节序列。

至此就完成了一次完整的数据封装。

2.接收数据的过程

当帧达到目的主机时,将沿着协议栈自低而上依次传递,各层协议依次处理帧中本层负责的头部,获取到所需信息,并最终将处理后的数据交给应用程序。该过程称为分用。


由图可看到,当帧进入目的第的以太网驱动后,通过以太网帧的2字节类型数据区分帧类型交给哪个协议处理(ARP IP RARP),如果为0x800则为IP数据报,0x806则为ARP请求或应答报文,0x835则为RARP请求或应答报文。

同理,由于ICMP,TCP,UDP都使用IP协议提供的服务,所以IP数据报的头部采用16位的字段来区分他们。

TCP和UDP又通过数据报头部中16位端口号区分不同的应用程序,比如DNS协议对应端口53,HTTP协议对应端口80。

通过分装和分用的过程,顶层应用仿佛在直接通信,而感受不到底层繁琐的过程。

TCP/IP协议族体系结构相关推荐

  1. 第一章 TCP/IP协议族

    一.协议族体系结构 TCP/IP协议族分为四层协议系统,自底向下分别为数据链路层.网络层.传输层.应用层. 数据链路层常用ARP(地址解析协议)和RARP(逆地址解析协议).在网络层使用IP寻址,而在 ...

  2. TCP/IP协议族(第4版)

    链接:https://pan.baidu.com/s/1Pia2by1s83kiVXEyU-dPRg 密码:ruur <世界著名计算机教材精选·TCP/IP协议族(第4版)>可作为大学生和 ...

  3. OSI参考模型 TCP/IP协议族 数据封装与解封过程

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一. OSI参考模型和TCP/IP协议族 1.OSI七层参考模型 ①应用层 ②表示层 ③会话层 ④传输层 ⑤网络层 ⑥数据链 ...

  4. TCP/IP 协议族 And HTTP 协议 基基基础知识

    文章目录 TCP/IP协议群 HTTP 协议 1.HTTP 消息结构 2.HTTP 请求方法 3.HTTP 响应信息 4.HTTP 状态码 5.HTTP content-type 6.请求类型Get与 ...

  5. HTTP 协议入门 — (TCP/IP协议族、通信传输流、URI 与 URL 的区别、Cookie 状态管理、HTTP 支持的方法、状态码类别、HTTP 首部字段)

    TCP/IP协议族 在介绍 HTTP 协议之前,我们先对 TCP/IP 协议族有个大概的了解,TCP/IP 协议从上到下主要分为应用层.传输层.网络层和数据链路层,各层的主要功能如下表所示: 协议层 ...

  6. TCP/IP协议族(一) HTTP简介、请求方法与响应状态码

    接下来想系统的回顾一下TCP/IP协议族的相关东西,当然这些东西大部分是在大学的时候学过的,但是那句话,基础的东西还是要不时的回顾回顾的.接下来的几篇博客都是关于TCP/IP协议族的,本篇博客就先简单 ...

  7. 深入理解TCP/IP协议族

    TCP/IP协议族是一个四层协议系统,自底而上分别是数据链路层.网络层.传输层和应用层.每一层完成不同的功能, 且通过若干协议来实现,上层协议使用下层协议提供的服务. MAC地址,处于数据链路层. I ...

  8. Network 之五 TCP/IP 协议族、工作流程、常用协议格式

      最近工作需要搞网络相关的内容,由于之前对网络了解比较少,因此开始重点学习一下网络相关的各种知识.博文中的有些内容来自于在学习过程中对于一些互联网上我认为的重点知识的记录,如果侵权请联系删除!    ...

  9. 网络传输之TCP/IP协议族

    我们现实网络无处不在,我们被庞大的虚拟网络包围,但我们却对它是怎样把我们的信息传递并实现通信的,我们并没有了解过,那么当我们在浏览器中出入一段地址,按下回车这背后都会发生什么? 比如说一般场景下,客户 ...

最新文章

  1. JMeter接口测试示例(六)——上传文件
  2. Linux运维:查看磁盘空间的大小
  3. 历史客人-报表记录信息
  4. SAP UI5 Input字段live change事件的一个例子
  5. 第44课 角谷猜想 动动脑 第2题 阅读程序写结果
  6. python嵌套类(内部类相互调用)_核心解密Python函数在(类与函数之间)和(类与类之间)互相调用...
  7. matlab2c使用c++实现matlab函数系列教程-var函数
  8. [转载] Python 列表(List)
  9. oracle设置memory_target,oracle初始化参数之memory_target
  10. 倒车入库- 通过后视镜调整方向盘
  11. python开发网页视频播放器_python实现媒体播放器功能
  12. AndroidStudio:Image not loaded Try to open it externally to fix format problem
  13. 基于Heka+Flume+Kafka+ELK的日志系统
  14. html背景图片不重叠铺满,html中背景图片铺满页面没有重复的效果
  15. 如何快速了解一个新的前端项目?
  16. 隐私泄露防不胜防,真的没有办法了吗?
  17. 移动架构之MVP框架
  18. 高考数学90分能学好计算机,高中数学,如何从90分以下突破120分?你必须做好这两个方面!...
  19. 第七章 C语言函数_什么是函数?C语言函数的概念
  20. Hbuildx 使用vue打包的App实现微信分享功能

热门文章

  1. CodeForces 279B
  2. letcode帕斯卡三角形
  3. Linux文件IO_02
  4. 计算机网络(一)—— 概述(6):计算机网络体系结构
  5. 案例实战:LightningChart集成Dynamotive汽车遥测软件|见证真正无与伦比的性能
  6. 使用python控制摄像头
  7. Xpath的基本使用方法
  8. 记一次dlib安装失败
  9. 栈和队列相互实现 (用队列实现栈/用栈实现队列) 超详细~
  10. 爬取华农兄弟哔哩哔哩所有视频信息