OSI网络分层介绍

  网络结构的标准模型是OSI模型,由国际互联网标准化组织定义的网络分层模型。虽然目前没有完全按照这种模型实现的网络协议栈,但是学习这个模型对于我们理解网络协议还是很有帮助的。

1.OSI网络分层模型

  7层,同一层是对等层,对等层之间规则是一致的。

     什么是协议栈?一个网络上运行的网络规则。通过协议栈的不同层可以划分为不同层。

2.OSI的七层网络结构

  • 物理层:物理特性(机械特性,功能特性,电器特性),传输单位是比特,网卡在物理层
  • 数据链路层:可靠数据传输,物理寻址,数据成帧,数据的检测重发,流量控制以及链路控制
  • 网络层:一个主机到另一个主机,有流量控制,拥塞控制等。数据单位为包。
  • 传输层:分段,用来保证上一层的会话层能够传输到另一方的会话层。
  • 会话层:建立,终止,会话过程。主要功能是提供请求者和提供者之间的通信。
  • 表示层:对数据进行处理,包括压缩,加密,以及格式的转换
  • 应用层:为应用程序提供访问网络服务的接口。或者为用户提供常用的应用,比如电子邮件应用,网络浏览器,QQ这些。。。。。

下三层(物理层,数据链路层,网络层)是通信子网层,为上层提供通信服务。需要注意,OSI并不是一个网络的结构,他只是告诉我们每一层应该做什么。ISO为每一层都定义了标准,每个标准都有自己的内部标准定义。

3.OSI参考模型中的数据传输

 

  • 应用程序调用应用层接口然后进入应用层
  • 应用层加上报头形成对应的协议数据单元,然后传递给下一层
  • 表示层不关系传来的内容,对数据进行处理然后再加上表示层的报头。传给下一层
  • 与上面类似,往下依次加上报头。在数据链路层则不同,需要加上帧头帧尾,打包成一个数据帧,然后再传给物理层。尾部是数据的校验和,用于判断数据是不是正确发送。
  • 物理层将上面传输过来的数据发送出去。

主机B和主机A相反,是一个解封的过程,一次经过物,数,网,传,会,表,应,将主机B发送的数据接收和解包,最后传递给应用程序。

  • 主机B物理层接收数据,送给数据链路层
  • 数据链路层进行校验,如果没有出错就发给上一层网络层。
  • 与上面类似,依次去掉头部传递给上一层,最后到达B的应用程序中。

 TCP/IP 协议栈

  上一节对ISO/OSI7层模型做了简单介绍,由于ISO指定的OSI参考模型过于庞大和复杂,在实现的时候造成了很大困难,所以招到了很多批评。在实际中,TCP/IP协议栈获得了更加广泛的应用。主流的操作系统基本上都采用TCP/IP协议栈。

 1.TCP/IP协议栈参考模型

  从上到下分4个层次:应用层,传输层,网络互联层,和主机到网络层。

 

  • 主机到网络:TCP/IP并没有给出具体实现,仅仅规定了给上一层的网络互联层提供的访问接口,可以传输IP数据包,具体实现随网络类型的不同而不同。
  • 网络互联层:是TCP/IP协议栈的核心。将数据进行分组并发到目的主机或者网络。有时候为了尽快发送分组,一个数据包的分组可能要经过不同的路径进行传递。这样会造成分组到主机的顺序不是原来发送的顺序,这就需要在这一层对分组进行排序。这一层定义了数据包的分组格式和协议,采用的是IP协议,因此网络互联层经常被称为IP层。这一层的功能主要由路由,网际互联和拥塞控制等。
  • 传输层:提供源主机和目标主机上的对等层之间可以进行对话的机制。定义了两种协议,TCP和UDP。TCP是面向连接,可靠的协议。提供了窗口控制,超时重发等方法,将数据发送到互联网上的其他主机。UDP是不可靠的,无连接的协议,使用与不怕数据丢失,不需要对报文进行排序,流量控制的场景。
  • 应用层:将OSI的会话层和表示层取消,功能被合并到应用层,基于TCP协议的有(FTP文件传输协议,HTTP超文本传输协议),基于UDP的协议有简化的FTP协议,网络管理协议SNMP,域名服务DNS,网络文件共享NFS和SAMBA等。还有两种方式均有实现的协议,比如P2P协议。

TCP/IP参考模型的层次结构:

此图的IP层中有网际控制报文协议(ICMP)和地址识别协议(ARP),并不是IP层的一部分,而是和IP层一起工作。ICMP是用来报告网络上的某些出错信息。ARP在IP和数据链路层之间,它是在32位IP地址和48位局域网地址之间执行翻译的协议。

2.主机到网络层协议

  对应与OSI的数据链路层,有上图可以看出本层主要为IP协议和ARP协议提供服务,发送和接收网络数据报。

  TCP/IP技术主要基于以太网标准。采用的是一种带冲突检测的载波侦听多路接入的方法进行传输(CSMA/CD);

  以太网的封包格式(在IP数据的基础上增加了14个字节):

数据段的长度有一个最大值,以太网为1500,这个特性我MTU(最大传输单元),如果比这个值大,在IP层数据要进行分片,使得每个片都小于等于MTU.

CRC用于校验,保证数据传输的正确性,通常由硬件实现,例如网卡设备实现网络数据的CRC校验。

3.IP协议

  IP协议是TCP/IP协议中最为重要的协议。为TCP,UDP,ICMP提供传输的通路。IP层能够提供子网的互联,使不同子网之间能传输数据。IP层的作用:

  • 发现正确的目的主机地址
  • 把数据从一个主机传输到另一个主机
  • 路由选择:选择数据在互联网上的传送路径
  • 数据报文分段,当大于MTU时,将数据进行分段发送

IP数据如图所示,头部长度最短为20个字节。

  • 版本   ip协议的版本号,如果为IPV4此字段值为4,如果为IPV6此字段为6
  • 首部长度    除去数据的整个头部的数据长度,32位为单元进行计算,因为首部长度为20个字节,160位,160、/3=5,所以这个字段最小值是5。
  • 服务类型  8位如图所示

优先权现在已经忽略,剩下的分为为最小延迟(D),最大吞吐量(T),最高可靠性(R),最小费用(F).这4个位中最多只用一个位置1,如果全为0,表示为一般服务。

D值为1表示请求低时延

T值为1表示请求高吞吐量、

R值为1表示请求高可靠性

F值为1表示请求低费用

这个主要用在如果有两个路由方式可以选择的时候,路由器读取这些字段,判断用那种方式。

  • 总长度  总长度为16位,表示以字节为单位的数据报文长度。包含IP的头部和数据部分。以16为单位进行计算。理论上,本字段为16位,2^16-1最大可达到65535个字节的长度。
  • 标识和片偏移      IP每发一份数据报文就会填写一个标识表示此数据包。片偏移表示数据在原数据报文中的偏移地址。
  • 生存时间TTL      TTL字段的值表示数据报文最多可以经过的路由器数量。一般为32或者64,经过一个路由器TTL减1.
  • 协议类型       8位,表示IP上承载的是什么高级协议。
  • 校验和        16位长度的数值,使用循环冗余校验,作用是包装IP帧的完整性。
  • IP选项        IP选项字段是一个32位的字段,用来表示IP数据段使正常数据还是用作网络控制的数据。
  • 源地址和目的地址        源地址表示发送数据的主机或者设备的IP地址,目的地址为接收数据的主机IP地址。

4.网际控制报文协议(ICMP)

用于传递差错信息,时间,回显,网络信息等报文控制数据

  • ICMP协议格式

ICMP报文的数据格式

  • 类型,表示不同类型的ICMP报文(分类)
  • 代码段用于对类型字段ICMP报文的详细规定(更详细划分)
  • 校验和用于校验

举例:目标不可达的报文格式

类型字段的值设为3,代码字段根据实际情况进行设置。第4-7个字节作为保留字,全部设置为0.

5.传输控制协议(TCP)

  在原有IP协议的基础上,增加了确认重发,滑动窗口和复用/解复用等机制,提供可靠,面向连接的字节流服务。

优点:

  1. 有序
  2. 面向连接
  3. 可靠,如果有误不发送确认应答,发送方超时后会自动重发
  4. 缓冲传输
  5. 全双工
  6. 流量控制(滑动窗口)

TCP数据在IP报文中的位置

TCP报文的数据格式

  • 源端口号和目的端口号:

表示发送端和接收端的端口,用于确认发送端和接收端的应用程序。

  • 序列号:表示分配给TCP包的编号。依次加1
  • 确认号:接收成功确认号加1,并返回回来,发送方再次发送的时候从确认号开始
  • 头部长度:TCP头部的长度,以32位为单位
  • 保留位:没有使用
  • 控制位:可以多个位一起设置

  • 窗口尺寸:表示本机上TCP协议可以接受的以字节为单位的数目
  • 校验和:用于检测传输数据的正误
  • 紧急指针:16b。只有设置了URG位才有效,它指出了紧接紧急数据的字节的顺序编号。
  • 选项:经常使用的最大分段长度MSS。指明当前主机所能接收的最大报文长度。

三次握手:

四次握手释放连接

tcp的封装和解封装

如图所示

TCP/IP协议族简介的更多相关文章

  1. [转]从OSI网络模型到TCP/IP协议族简介

    OSI七层模型 OSI(Open System Interconnection,开放系统互联)七层网络模型成为开放式系统互联参考模型,是一个把网络通信在逻辑上的定义,也可以理解成为定义了通用的网络通信 ...

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

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

  3. TCP/IP 协议族的简介

    TCP/IP重要的特性就是分层.TCP/IP 按照层次分为四层:应用层.传输层.网络层.数据链路层.分层的好处就是当某些地方需要改变的时候,只需要将改变的层替换掉即可,而不用去把整体做替换.各层之间的 ...

  4. iOS的TCP/IP协议族剖析&&Socket

    原创文章,版权声明:自由转载-非商用-非衍生-保持署名 | Creative Commons BY-NC-ND 3.0 简介 该篇文章主要回顾--TCP/IP协议族中的TCP/UDP.HTTP:还有S ...

  5. 深入浅出--iOS的TCP/IP协议族剖析&&Socket

    深入浅出--iOS的TCP/IP协议族剖析&&Socket   简介 该篇文章主要回顾--TCP/IP协议族中的TCP/UDP.HTTP:还有Socket.(--该文很干,酝酿了许久! ...

  6. TCP/IP协议族(一)

    TCP/IP协议族(一) HTTP简介.请求方法与响应状态码 接下来想系统的回顾一下TCP/IP协议族的相关东西,当然这些东西大部分是在大学的时候学过的,但是那句话,基础的东西还是要不时的回顾回顾的. ...

  7. 重识TCP/IP协议族与HTTP基础

    不忘初心 砥砺前行, Tomorrow Is Another Day ! 本文概要: TCP/IP协议族的网络分层 TCP三次握手四次挥手 Http简介 报文结构 Http的请求方法及状态码 常用的H ...

  8. 深入浅出-TCP/IP协议族剖析&&Socket

    Posted by 微博@Yangsc_o 原创文章,版权声明:自由转载-非商用-非衍生-保持署名 | Creative Commons BY-NC-ND 3.0 #简介 该篇文章主要回顾–TCP/I ...

  9. Android网络编程系列 一 TCP/IP协议族

    在学习和使用Android网路编程时,我们接触的仅仅是上层协议和接口如Apache的httpclient或者Android自带的httpURlconnection等等.对于这些接口的底层实现我们也有必 ...

随机推荐

  1. 6.Renderer Window

    渲染是实时的,所见即所得.同时还可以输出一些统计信息. Pixel Snoop:获取颜色值,同时把该值复制到剪贴板,主要用户是获取颜色值 Wireframe:开启后可以查看3D节点图形骨架 Stati ...

  2. ajax获取跨域数据

    1.效果图 2.源码 <%@ page contentType="text/html;charset=UTF-8" language="java" %&g ...

  3. MobX入门

    MobX入门 本文尝试解释MobX是如何运作的.我们将用MobX创建一个小案例.如果你正在找靠谱的MobX文档,可以去看官方文档. 什么是MobX 官方文档的解释:简洁,易扩展的状态管理.简单来说,M ...

  4. 使用DbVisualizer变量

    变量可用于构建参数化SQL语句,并让DbVisualizer在执行SQL时提示您输入值.如果您重复执行相同的SQL,只是希望在同一个SQL语句中传递新数据,这很方便. 变量语法 变量格式支持设置默认值 ...

  5. 关于出现Failed to instantiate SLF4J LoggerFactory问题原因,解决办法

    在创建spring boot 文档进行配置的时候,因为使用spring boot 父级依赖的版本 <artifactId>spring-boot-starter-parent</ar ...

  6. Spring 获取propertise文件中的值

    Spring 获取propertise文件中的值 Spring 获取propertise的方式,除了之前的博文提到的使用@value的注解注入之外,还可以通过编码的方式获取,这里主要说的是要使用Emb ...

  7. 04--奠定MYSQL江湖地位的开发注意要点

    为不同的行业提供不同的MYSQL应用场景 吴炳锡老师谈到,不同行业的业务有不同的特点,选择好一个适合自己行业的MYSQL应用场景至关重要. 互联网行业 速度一直都是互联网发展的第一要义,互联网行业所使 ...

  8. HTML 单击a标签 实现下载文件而不是浏览器打开预览

    <a d ownload class="down" title="">

  9. Debian 6 , 十个串口为什么只识别到了 6个 剩下4 个被禁止了

    0.946441] Serial: 8250/16550 driver, 6 ports, IRQ sharing enabled [    0.946533] serial8250: ttyS0 a ...

  10. 插入排序InsertSort

    插入排序:从第二个数开始  一直和前面的数组比较 获得排序定位 ​ 代码 /** *插入排序 */ public class InsertSort { public static void inser ...