2.5.2 网络原理章 网络通信基础

1.0 IP地址

概念

IP地址主要用于标识网络主机、其他网络设备(如路由器)的网络地址。简单说,IP地址用于定位主机的网络地址
就像我们发送快递一样,需要知道对方的收货地址,快递员才能将包裹送到目的地。

使用ip地址可以描述网络上的一个设备所在地

格式

  • IP地址是一个32位的二进制数,通常被分割为4个“8位二进制数”(也就是4个字节),如: 01100100.00000100.00000101.00000110。
  • 通常用“点分十进制”的方式来表示,即 a.b.c.d 的形式(a,b,c,d都是0~255之间的十进制整数)。如: 100.4.5.6。

特殊IP

  • 127.*的IP地址用于本机环回(loop back)测试,通常是127.0.0.1
  • 本机环回主要用于本机到本机的网络通信(系统内部为了性能,不会走网络的方式传输),对于开发网络通信的程序(即网络编程)而言,常见的开发方式都是本机到本机的网络通信

2.0 端口号

概念

  • 在网络通信中,IP地址用于标识主机网络地址,端口号可以标识主机中发送数据、接收数据的进程。简单说:端口号用于定位主机中的进程。
  • 端口号用于区分一个主机上不同的应用程序
  • 一个网络程序,在启动的时候都需要绑定一个或者多个端口号,后续的通信都需要依赖端口来进行展开的(比如mysql默认绑定的端口是3306)

格式

端口号是0~65535范围的数字,在网络通信中,进程可以通过绑定一个端口号,来发送及接收网络数据。

注意

  • 两个不同的进程,不能绑定同一个端口号,但一个进程可以绑定多个端口号。
  • 一个进程启动后,系统会随机分配一个端口(启动端口)
  • 程序代码中,进行网络编程时,需要绑定端口号(收发数据的端口)来发送、接收数据。
  • 进程绑定一个端口号后,fork一个子进程,可以实现多个进程绑定一个端口号,但不同的进程不能 绑定同一个端口号。

3.0 协议

概念

  • 描述网络通信传输的数据的含义

  • 协议就是表示一种约定,这样的约定可以是任意的(比如你跟某人见面时规定穿着颜色和配饰,这样就能确认一个人,这就是一种协议)

  • 协议,网络协议的简称,网络协议是网络通信(即网络数据传输)经过的所有网络设备都必须共同遵从 的一组约定、规则。如怎么样建立连接、怎么样互相识别等。只有遵守这个约定,计算机之间才能相互 通信交流。通常由三要素组成

    1. 语法: 即数据与控制信息的结构或格式;

    类似打电话时,双方要使用同样的语言:普通话

    1. 语义:即需要发出何种控制信息,完成何种动作以及做出何种响应

    语义主要用来说明通信双方应当怎么做。用于协调与差错处理的控制信息。 类似打电话时,说话的内容。一方道:你瞅啥?另一方就得有对应的响应:瞅你咋的!

    1. 时序,即事件实现顺序的详细说明。

    时序定义了何时进行通信,先讲什么,后讲什么,讲话的速度等。比如是采用同步传输还 是异步传输。
    女生和男生的通话,总是由男生主动发起通话,而总是在男生恋恋不舍的时候,由女生要 求结束通话。

  • 协议(protocol)最终体现为在网络上传输的数据报的格式。

  • 网络发展这么多年,很多细节,都已经有大佬,规定出现成的协议了,我们主要是学习协议

作用

Q : 为什么需要协议?

  • 电脑种类繁多,设备的厂商也很多,计算机操作系统,也有很多,计算机网络硬件设备,还是有很多. 必须有一份统一的协议标准,让大家按同样的标准来研发设备,大家搞出来的才都可以相互通信
  • 计算机之间的传输媒介是光信号和电信号。通过 “频率” 和 “强弱” 来表示 0 和 1 这样的信息。要想传递 各种不同的信息,就需要约定好双方的数据格式。

知名协议的默认端口号

  • 系统端口号范围为 0 ~ 65535,其中:0 ~ 1023 为知名端口号,这些端口预留给服务端程序绑定广泛使 用的应用层协议,如:

22端口:预留给SSH服务器绑定SSH协议
21端口:预留给FTP服务器绑定FTP协议
23端口:预留给Telnet服务器绑定Telnet协议
80端口:预留给HTTP服务器绑定HTTP协议
443端口:预留给HTTPS服务器绑定HTTPS协议

  • 需要补充的是:以上只是说明 0 ~ 1023 范围的知名端口号用于绑定知名协议,但某个服务器也可以使用其他 1024 ~ 65535 范围内的端口来绑定知名协议。(一个例子: 餐厅的VIP包房是给会员使用,但会员也可以不坐包房,坐其他普通座位。)

五元组

在TCP/IP协议中,用五元组来标识一个网络通信:

  1. 源IP:标识源主机
  2. 源端口号:标识源主机中该次通信发送数据的进程
  3. 目的IP:标识目的主机
  4. 目的端口号:标识目的主机中该次通信接收数据的进程
  5. 协议号:标识发送进程和接收进程双方约定的数据格式
  • 可以在cmd中,输入 netstat -ano 查看网络数据传输中的五元组信息:
  • 如果需要过滤(一般是通过端口号或进程PID过滤),可以使用 netstat -ano | findstr 过滤字符串

4.0 协议分层

概念

  • 对于网络协议来说,往往分成几个层次进行定义
  • 网络通信,是一个比较复杂的工作,会涉及到一系列分厂繁琐,非常细节的工作…,光靠一个协议解决所有问题,会导致整个协议非常复杂,非常庞大的.
  • 因此我们就要对协议进行拆分,但拆分出来的协议会放长多,于是对这些协议分类(功功能差不的,定位差不多的), 分层(把这些协议抽取出上下层关系,上层调用下层协议,下层协议给上层协议提供服务支持),这样可以避免跨层级的调用从而引起混
  • 分层的本质就是给这些西医搞了明确的层级关系,必变跨层之间的交互,降低耦合性,提高整个系统的可读性

作用

分层最大的好处,类似于面向接口编程:定义好两层间的接口规范,让双方遵循这个规范来对接。

在代码中,类似于定义好一个接口,一方为接口的实现类(提供方,提供服务),一方为接口的使用类 (使用方,使用服务):

  • 对于使用方来说,并不关心提供方是如何实现的,只需要使用接口即可

  • 对于提供方来说,利用封装的特性,隐藏了实现的细节,只需要开放接口即可。

    1. 上层不需要了解下层的细节(封装)
    2. 能灵活的调整/替换某一层的协议

OSI七层模型

  • 只存在教科书中没有那些地方真的用这个模型

TCP/IP五层(或四层)模型

介绍

真实世界的情况为这个模型

TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇。

TCP/IP通讯协议采用了5层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。

物理层我们考虑的比较少。因此很多时候也可以称为 TCP/IP四层模型。物理层篇硬件,和软件关系不大

组成

  • **应用层:**负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程 访问协议(Telnet)等。我们的网络编程主要就是针对应用层。(拿到某些数据用来具体干啥,不同的应用程序就会使用不同的应用层协议来通信(也可能相同))
  • **传输层:**负责两台主机之间的数据传输。如传输控制协议 (TCP),能够确保数据可靠的从源主机发 送到目标主机。(只关注起点和终点,数据从哪里发,发到哪里去)
  • **网络层:**负责地址管理和路由选择。例如在IP协议中,通过IP地址来标识一台主机,并通过路由表 的方式规划出两台主机之间的数据传输的线路(路由)。路由器(Router)工作在网路层。(比如上海->广东 有很多不同的走法,而开车的要规划出一个最优的路径规划(这里只管路径,不管方式))
  • **数据链路层:**负责设备之间的数据帧的传送和识别。例如网卡设备的驱动、帧同步(就是说从网线上 检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作。 有以太网、令牌环网,无线LAN等标准。交换机(Switch)工作在数据链路层。(相邻节点的数据该如何传输,把总的路线分成了一个个的站点,站点与站点之间该用何种方式走(空路,铁路,陆路…))
  • **物理层:**负责光/电信号的传递方式。比如现在以太网通用的网线(双绞 线)、早期以太网采用的的同 轴电缆(现在主要用于有线电视)、光纤,现在的wifi无线网使用电磁波等都属于物理层的概念。物理 层的能力决定了最大传输速率、传输距离、抗干扰性等。集线器(Hub)工作在物理层。(描述网络通信中的一些基础设施需要遵守的规范. 会约定比如网线是啥样子,网口是啥样子的)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

网络设备所在分层

  • 对于一台主机,它的操作系统内核实现了从传输层到物理层的内容,也即是TCP/IP五层模型的下四层
  • 对于一台路由器,它实现了从网络层到物理层,也即是TCP/IP五层模型的下三层
  • 对于一台交换机,它实现了从数据链路层到物理层,也即是TCP/IP五层模型的下两层
  • 对于集线器,它只实现了物理层

注意我们这里说的是传统意义上的交换机和路由器,也称为二层交换机(工作在TCP/IP五层模型的下两 层)、三层路由器(工作在TCP/IP五层模型的下三层)。

随着现在网络设备技术的不断发展,也出现了很多3层或4层交换机,4层路由器。我们以下说的网络设 备都是传统意义上的交换机和路由器。

网络分层对应

在这里插入图片描述

5.0 网络传输的基本流程

例子

以qq发送消息为例子

//以qq发送消息为例子,主机A在输入框输入一段句子,相让主机B接收
 
发送方的情况:
1.应用层
    - QQ应用程序,从输入框中获取你要输入的消息,构造成应用层数据报.
    - 根据应用层协议(很多应用程序会自定义应用层协议) 
    - 所谓的"构造应用层数据报告"的过程就是按照一定的格式进行字符串拼接 接收方也要按照这种方式解析
    - 应用程序,就会调用传输层提供的接口,把上述数据交给传输层进行处理.
    
2.传输层
    - 传输层的协议有很多,其中主要的是TCP和UDP,这里假设使用UDP,上面我们把数据从应用
    - 层传输,交给了UDP.于是UDP协议就要按照自己的协议格式生成一个UDP数据报(在我们应
      用层的数据报前面添加一个UDP报头[header],而原来应用层的数据报就变成UDP的载荷[payload]
    - UDP不关心应用层数据,里面有啥,都是啥内容,只是把应用层数据当成一个字符串,从而构造出UDP数据报(好比寄快递不关心你寄啥,只关心	  尺寸和质量是否能装下和是否违规)
    - UDP报头包含很多信息,主要是源端口 目的端口
    - 此时,传输层会把构造好的udp数据报,进一步的交给网络层                                          
                                         
                                              
3.网络层
    - 网络层的主要协议是IP协议
    - IP协议也会根据自己的格式,来构造出IP数据报
    - 本质就是在UDP协议数据报的 前面加上IP报头,报头里面有IP协议的一些属性,内容UDP多好多
    - 原来UDP的数据报就是IP数据报的载荷
    - 与UDP相似,IP协议不关心你载荷的内容是啥,只是把载荷前面拼接一个IP报头                                          
	- IP报头最关键的属性是 源IP 和 目的IP 
    - 我们通常称 源IP,源端口 目的IP,目的端口 协议类型, 为网络通信的"五元组"                                      
    - 接下来把数据报传给数据链路层
                                              
                                             
                                              
4.数据链路层
    - 主要协议是以太网(平时上网需要差一个网线,这个网线就叫以太网线,符合以太网协议)                                           - 以太网又会针对IP数据报进一步的封装,再IP数据报前添加一个数据头[帧头] 和 一个数据尾[帧尾]   
      [这里不是报头了,而是含有各类属性的帧头和帧尾]
    - 原来的IP数据报就是载荷,只是把载荷当字符串,进一步拼接上针头和帧尾 构成以太网数据帧
    - 网络上传输的数据的基本单位,有很多术语 1.(packet) 2.(frame) 3.(Datagram) 4.(segment)                       - 上述的数据还需要进一步交给物理层
                                              
                                              
5.物理层
   - 到了硬件设备(比如网卡)
   - 上述传的数据本质是二进制数据(一组01构成的)                                           
   - 硬件设备就需要对上述数据进行转化了(光信号[激光]/电信号[网线的高低电频产生01]/电磁波[使用无线wifi])
   - 到这里主机A发送了数据                                            

                                              
接收方的情况:
1.物理层                                           
   - 物理层(硬件设备,网卡)先接收到信号(光信号[激光]/电信号[网线的高低电频产生01]/电磁波[使用无线wifi])  
   - 调制:把你要传输的信号放到光电中
   - 解调:从广电信号中取出数据 
   - 调制解调器:负责完成调制和解调这两项工作的设备===>叫做猫 , 光猫=>针对光信号进行调制解调
   - 首先要把接收到的信号进行解调(得到01二进制数据)
   - 这个数据给数据链路层  
       

2.数据链路层:
   - 把数据报以 以太网数据帧的格式解析 此时会去掉帧头帧尾,把载荷取出来根据以太网格式的某些字段交给交给上层特殊的协议处理[IP协议]
                                     
       
3.网络层
  - IP协议针对这个数据报进行解析,去掉ip报头,取出载荷交给传输层   
       
       
4.传输层
  - 根据IP报头的字段,就知道这个载荷是一个UDP数据报,交给UDP处理,UDP针对数据报解析,去掉报头,取出载荷,交给应用层序     
  

5.应用层
  - UDP报头中有一个字段,目的端口,根据目的端口找到关联应用程序,交给应用程序,qq程序就会收到这个数据,qq就会按照自己的应用层协议,进	行解析,获得消息,把消息显示到界面上     
       

封装和分用

  • 上述发送方从上到下,一次添加报头的过程,称为 封装

  • 上述接收方从下到上,依次解析报头的过程就是 分用

  • 每次网络数据的传输都要经历这个过程

  • 封装就是在打包快递,分用就是在拆快递

  • 当然发送发和接收方在封装和分用的中间还会有一些列机器进行转发 (一系列路由器或者交换机进行转发,转发的每一个设备处理的流程都是跟分装分用是一样的,只不过交换机有有一点不同,它只需要封装到数据链路层即可,交换机只需要解析出以太网数据帧,进一步获取到帧头的"mac地址",根据mac地址查询交换机内部的转发表,确定接下来数据从哪个网口发出去,在发送之前又会重新把以太网数据帧进行封装,这相当于交换机接收到信息拆开一层找到要去哪个网口,又把数据分装好传走,而路由器要解析到网络层,解析出IP数据报,根据目的IP进一步规划接下来要走的路线,规划好再封装好并转发**), 当然这些都是经典类型,现在很多交换机都会分析道应用层
    中间还会有一些列机器进行转发 (一系列路由器或者交换机进行转发,转发的每一个设备处理的流程都是跟分装分用是一样的,只不过交换机有有一点不同,它只需要封装到数据链路层即可,交换机只需要解析出以太网数据帧,进一步获取到帧头的"mac地址",根据mac地址查询交换机内部的转发表,确定接下来数据从哪个网口发出去,在发送之前又会重新把以太网数据帧进行封装,这相当于交换机接收到信息拆开一层找到要去哪个网口,又把数据分装好传走,而
    路由器要解析到网络层,解析出IP数据报,根据目的IP进一步规划接下来要走的路线,规划好再封装好并转发)**, 当然这些都是经典类型,现在很多交换机都会分析道应用层

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_Ap0stoL

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值