目录

  • 一、局域网和广域网
    • 1.1 局域网LAN
    • 1.2 广域网
  • 二、网络通信基础
    • 2.1 IP地址
    • 2.2 端口号
    • 2.3 协议
    • 2.4 协议分层
      • OSI七层网络模型
      • TCP/IP五层(或四层)模型
      • 网络设备所在分层
  • 三、封装和分用
    • 3.1 封装
      • 应用层(QQ应用程序)
      • 传输层(操作系统内核)
      • 网络层(操作系统内核)
      • 数据链路层(驱动程序)
      • 物理层(硬件设备)
    • 3.2 分用
      • 物理层(硬件设备,网卡)
      • 数据链路层(驱动)
      • 网络层(操作系统内核)
      • 传输层(操作系统内核)
      • 应用层(应用程序QQ)


独立模式:计算机之间相互独立。
随着时代的发展,越来越需要计算机之间互相通信,共享软件和数据,即以多个计算机协同工作来完成业务,就有了网络互连。
网络互连:将多台计算机连接在一起,完成数据共享。
数据共享本质是网络数据传输,即计算机之间通过网络来传输数据,也称为网络通信
根据网络互连的规模不同,可以划分为局域网和广域网

一、局域网和广域网

1.1 局域网LAN

局域网,即 Local Area Network,简称LAN
Local 即标识了局域网是本地,局部组建的一种私有网络
局域网内的主机之间能方便的进行网络通信,又称为内网;局域网和局域网之间在没有连接的情况下,是无法通信的。

局域网组建网络的方式有很多种:通过路由器/交换机组建起来的这些都叫做局域网。

  • 基于网线直连

    用两根线把三个主机给连起来,这三个主机就构成了一个局域网。

  • 基于交换机组建

    交换机上面的网口之间都是对等.(都是一样的口)效果就是把插在上面的设备给组建成一个局域网.这个局域网内部的主机之间就可以相互进行访问,交换机是把若干个设备给组建到一个局域网中.

  • 基于路由器组建

    路由器这里其实有两类端口:WAN口和LAN口.
    其中插在LAN口上的设备,在一个局域网里.
    通过WAN口连接到另外一个局域网;
    路由器则是连接了两个局域网(LAN口是一个,WAN又连了一个)。

1.2 广域网

广域网,即 Wide Area Network,简称WAN
通过路由器,将多个局域网连接起来,在物理上组成很大范围的网络,就形成了广域网。广域网内部的局域网都属于其子网。

广域网其实和局域网之间,没有明确界限.认为比较大的局域网,就可以称为"广域网"
全世界最大的广域网,叫做Internet(因特网)。

二、网络通信基础

网络互连的目的是进行网络通信,也即是网络数据传输,更具体一点,是网络主机中的不同进程间,基于网络传输数据。
那么,在组建的网络中,如何判断到底是从哪台主机,将数据传输到那台主机呢?这就需要使用IP地址来标识。

2.1 IP地址

IР地址:描述了网络上的一个主机的位置(定位主机的一个网络位置).(就相当于买快递时的收货地址)

格式
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(环回IP ,表示自己的这个主机)。

2.2 端口号

端口号:描述了一个主机上的某个应用程序.(相当于收件人的电话)

格式
端口号本质上是一个2个字节(16位)的无符号整数(0~65535范围的数字),在网络通信中,进程可以通过绑定一个端口号,来发送及接收网络数据。

两个不同的进程,不能绑定同一个端口号,但一个进程可以绑定多个端口号。

3306 mysql默认的端口号.
服务器程序在启动的时候,就需要绑定上一个端口号,以便客户端程序来访问。

知名端口号:把0-1024这些端口号,给划分出了一些具体的作用.
很多网络服务是属于非常常用,非常广泛的服务,为了更好的管理就给这些服务分配一些专门的端口号,并不是强制要求,而只是建议。

比如:
80: http服务器
443 :https服务器
22: ssh
23: ftp
如果你自己部署http服务器,可以把他绑定到80,也可以绑定到其他端口上.像java中知名的http服务器tomcat,使用的默认端口就不是 80 而是8080。

2.3 协议

协议,网络协议的简称,网络协议是网络通信(即网络数据传输)经过的所有网络设备都必须共同遵从的一组约定、规则。如怎么样建立连接、怎么样互相识别等。只有遵守这个约定,计算机之间才能相互通信交流。
协议(protocol)最终体现为在网络上传输的数据包的格式

为什么需要协议

网络通信的时候,本质上传输的是光信号和电信号;通过光信号的频率(高频率/低频率)电信号的电平(高电平/低电平)来表示0和1。要想传递各种不同的信息,就需要约定好双方的数据格式。

2.4 协议分层

网络通信这个过程其实很复杂,里面有很多很多的细节.如果就只通过一个协议,来约定所有的细节,这个协议就会非常庞大,复杂;更好的办法就是把一个大的复杂的协议,拆成多个小的,更简单的协议,每个协议,负责一部分工作。

协议分层类似于打电话时,定义不同的层次的协议:

我们的协议只有两层;但是实际的网络通信会更加复杂,需要分更多的层次。

分层的好处:

好处1:每层协议不需要理解其他层协议的细节.(更好的做到了封装)

打电话的人,不需要理解电话的工作原理,就能完成打电话的操作制造电话的人,也不需要成为语言大师。

好处2:把对应层的协议替换成其他协议.(更好的解耦合)

打电话的人,可以不使用有线电话,可以使用无线电话.
打电话的人,也可以使用英语,不使用汉语》

OSI七层网络模型

OSI:即Open System Interconnection,开放系统互连。

  • OSI 七层网络模型是一个逻辑上的定义和规范:把网络从逻辑上分为了7层
  • OSI 七层模型是一种框架性的设计方法,其最主要的功能使就是帮助不同类型的主机实现数据传输;
  • 它的最大优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,理论也比较完整。通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯。

    OSI 七层模型既复杂又不实用:所以 OSI 七层模型没有落地、实现。
    实际组建网络时,只是以 OSI 七层模型设计中的部分分层,也即是以下 TCP/IP 五层(或四层)模型来实现。

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

TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇。
TCP/IP通讯协议采用了5层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。

下面这四层的代码逻辑都是由操作系统和驱动以及硬件已经实现好了的。
站在全局的角度,认为是5层,但是最下面的物理层描述的是硬件设备,(和软件没啥关系,和程序猿距离比较远),这个时候就认为是四层。

物理层:网络通信中的硬件设备(网线/网卡…),针对硬件设备的约定,就是物理层协议所负责的范畴,需要保证所有的主机和网络设备之间,都是相互匹配的。

物理层负责光/电信号的传递方式。比如现在以太网通用的网线(双绞 线)、早期以太网采用的的同轴电缆(现在主要用于有线电视)、光纤,现在的wifi无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等。集线器(Hub)工作在物理层。

数据链路层:负责完成相邻(一根网线相连)的两个设备之间的通信的。[局部]

负责设备之间的数据帧的传送和识别。例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作。有以太网、令牌环网,无线LAN等标准。交换机(Switch)工作在数据链路层

网络层:负责点到点之间的通信.[全局]
网络中的任意节点,到任意节点之间的通信(不一定是相邻了,更多的是指不相邻的),网络层就负责在这两个点之间,规划出一条合适的路线。(实际的网络环境结构非常复杂.两个点之间的路线不只一条。就需要规划处最合适的一条)。

传输层:负责端到端之间的通信.
起点和终点,只是关注结果(数据到没到),不关注过程(不关注数据是走哪条路)

比如买快递时就需要填写自己的收件人地址和收件人姓名.商家就要根据这个地址把快递发给我,我和商家,都是只关注结果,不关注过程,快递公司要关注中间的过程。

应用层:和应用程序密切相关的.(你传输的这个数据,是干啥用的,不同的应用程序就有不同的用途)

比如有一天我在网上买一个床刷子:
商家,站在传输层:考虑这个东西是能不能发到我手上.
快递公司:站在网络层规划路线.
快递小哥:站在数据链路层,骑着电动车把货拉到集散中心.
电动车/集装箱卡车/公路站在物理层:提供传输的基础.
上面四步都是只在考虑包裹如何传输,不考虑这个包裹里面是啥,更不关心包裹里的东西是干啥用的。而我:作为买床刷子的人站在应用层,就是抱着一定的用途/目的来买的。

网络设备所在分层

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

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

三、封装和分用

  • 不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报(datagram),在链路层叫做帧(frame)。
  • 应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首(header),称为封装(Encapsulation)。
  • 首部信息中包含了一些类似于首部有多长,载荷(payload)有多长,上层协议是什么等信息。
  • 数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,根据首部中的 “上层协议字段” 将数据交给对应的上层协议处理。

3.1 封装

例如,使用QQ给一个同学发送消息,用户A在键盘上,输入了一个"hello",按下发送键。

应用层(QQ应用程序)

根据用户输入的内容,QQ的代码中就会根据程序猿所设计的应用层协议,把数据构造成一个应用层的协议报文(协议:是一种约定,报文:遵守了这个约定的一组数据)。注:QQ使用的应用层协议,是开发QQ的程序员自己设定的,假设现在的一种应用层协议格式为:

应用层协议就调用操作系统提供的API(称为socket API),把应用层的数据,交给传输层(就已经进入操作系统内核了)。

传输层(操作系统内核)

根据刚才传过来的数据,基于当前使用的传输层协议,来构造出一个传输层的协议报文。传输层最典型的协议为UDP,TCP。以TCP为例:

TCP的数据报=TCP报头+数据载荷(Payload,也就是一个完整的应用层数据)。

TCP的报头中有很多信息,其中最重要的,就是**“源端口"和“目的端口”**,类似于发件人电话和收件人电话。

可以简单的把这个构造TCP报文的过程视为是一个字符串拼接(这里拼的是二进制数据)。接下来就会把这个传输层的数据报,交给网络层。

网络层(操作系统内核)

拿到了完整的传输层数据报,就会再根据当前使用的网络层协议(例如IP),再次进行封装,把TCP数据报构造成IР数据报,这里还是添加上一个协议报头:


IP数据报=IР协议报头+载荷(完整的TCP/UDP的数据报)

这个报头中也有很多重要的信息,其中最重要的就是源IP和目的IP,类似于发件人的地址,和收件人的地址。紧接着,当前的网络层协议,就会把这个IP数据报,交给数据链路层。

数据链路层(驱动程序)

在刚才的IP数据报基础上,根据当前使用的数据链路层的协议,给构造成一个数据链路层的数据报.典型的数据链路层的协议,叫做“以太网”,就会构造成一个"以太网数据帧":

以太网数据帧=帧头+IP数据报+帧尾

帧头里面存储的是最重要的信息:接下来要传给的设备的地址是什么;
帧尾负责校验和。

IP协议里面写的地址,是起点和终点.(西安到安广镇)
以太网数据帧,帧头里写的地址,是接下来一个相邻节点的地址.(西安和长春)
随着数据往下一个设备转发,帧头中的地址,一直在时刻发生改变.
人在西安,这里的地址,写的是西安/长春;
人在长春,这里的地址,写的是长春/白城;
人在白城,这里的地址,写的是白城/安广镇;

数据链路层,又会把上述这个数据交个物理层。

物理层(硬件设备)

物理层做的工作,就是根据刚才的以太网数据帧(其实就是一组0 1)把这里的0 1变成高低电平,通过网线传输出去.或者把这里的0 1变成高频/低频的电磁波,通过光纤/无线的方式传播出去。

到了这一步,此时数据就已经离开了当前主机,前往了下一个设备.
下一个设备,可能是路由器/交换机/其他设备。

3.2 分用

分用就是封装的逆过程:
封装是从上往下,数据依次被加上了协议报头(包快递);
分用是从下往上,,数据一次被去掉了协议报头(拆快递);

物理层(硬件设备,网卡)

主机B的网卡感知到了一组高低电平,就会把这些电平翻译成0 1的一串数据,然后这一串0 1就是一个完整的以太网数据帧.物理层就把这个数据交给了数据链路层。

数据链路层(驱动)


数据链路层负责对这个数据进行解析,去掉帧头和帧尾,取出里面的IP数据报,然后交给网络层协议。

网络层(操作系统内核)

网络层协议(IP协议)又会对这个数据进行解析,去掉IP协议报头,取出里面的TCP数据报再交给传输层;

传输层(操作系统内核)

传输层协议(TCP协议)又会对这个数据进行解析,去掉TCP报头,取出里面的TCP数据报,交给应用层.

应用层(应用程序QQ)


应用层就会调用socket API从内核中读取到这个应用层数据报,再按照应用层协议进行解析,根据解析结果给显示到窗口中。

上述讨论的只是起点和终点的情况.A和B中间还有很多路由器和交换机呢?

无论网络多么复杂,这里整体的传输过程都是类似的.只是在不停的重复封装和分用的过程

网络通信基础(局域网、广域网、IP地址、端口号、协议、封装、分用)相关推荐

  1. Python网络编程基础之ip地址,端口号,TCP,socket

    Python网络编程基础 IP地址 ip地址表现形式 查看ip地址 Linux Windows 检查网络是否正常 端口与端口号 端口号分类 知名端口号 动态端口号 TCP协议 概念 TCP通讯步骤 特 ...

  2. tcping : ping ip地址+端口号

    起因:windows下cmd ping命令无法ping某一个端口. 对策:使用tcping工具了,Windows没有自带这个小工具,需要自己下载下来,放到 C:\Windows\System32 下. ...

  3. 关于ip地址 :局域网 广域网 ip 公网 私网 ipv6 ipv4的区别、hosts文件和DNS域名解析说明

    以下笔记总结于B站硬件茶谈:https://www.bilibili.com/video/BV1DD4y127r4 1.ip地址说明 1.1 网络基本知识说明(局域网/广域网/ip地址) 场景分析:假 ...

  4. Linux 修改局域网内ip地址

    警告:本文章只用来学习参考,只用来学习参考,只用来学习参考,重要的事情说三遍 Linux修改ip地址 有时候我们的ip地址是动态DHCP获取的,导致ip地址有时候会变更,给我们带来一些开发上的烦恼,这 ...

  5. 复习-网络编程之IP和端口号

    一. 网络编程中有两个主要的问题: 1.如何准确地定位网络上一台或多台主机;定位主机上的特定的应用(分别对应2.1): 2.找到主机后如何可推高效地进行数据传输(分别对应2.2): 二.网络编程中的两 ...

  6. Java之初步识别网络编程:IP、端口号、TCP/UDP、Socket、URL等

    文章目录 一.网络编程概述 二.网络通信要素概述 三.通信要素1:IP和端口号 IP相关 InetAdress类 如何实例化InetAddress 端口号 四.通信要素2:网络协议 TCP/IP协议簇 ...

  7. java 正则表达式 提取ip_java正则表达式提取地址中的ip和端口号

    由于我需要用到java正则表达式提取地址中的ip和端口号,所以我就写了一个demo,测试一下,下面是demo public class Test0810_1 { public static void ...

  8. 如何查看计算机在广域网的地址,如何知道本机当前局域网IP地址和广域网IP地址...

    如何知道本机当前局域网IP地址和广域网IP地址 IP地址具有唯一性,每一个IP地址代表每一台电脑,IP地址等于电脑的名字,所以要了解自己电脑的IP地址是相当重要.IP地址大致分为两类:广域网(公网)I ...

  9. 【Linux网络编程学习】预备知识(网络字节序、IP地址转换函数、sockaddr数据结构)

    此为牛客Linux C++课程和黑马Linux系统编程笔记. 1. 网络字节序 我们已经知道,内存中的多字节数据相对于内存地址有大端和小端之分. 磁盘文件中的多字节数据相对于文件中的偏移地址也有大端小 ...

  10. 局域网 固定IP地址 静态IP 无法上网,设置方法

    局域网 固定IP地址 无法上网,设置方法 局域网里,固定IP地址,无法上网,网络上搜索了很多,众说纷纭,但是都无法解决,只有看到这篇文章之后,依例设置,才终于正常上网,特转载出来,希望对遇到同样问题的 ...

最新文章

  1. bcache状态和配置文件详细介绍(翻译自官网)
  2. Leetcode 113. 路径总和 II 解题思路及C++实现
  3. 1分钟了解协同过滤,pm都懂了
  4. js防篡改对象之冻结对象
  5. 基于三维点云场景的语义及实例分割:RandLA-Net和3D-BoNet
  6. 前端、后端、运维都能用的动态 json 数据管理神器,节省你大量的开发、设计数据库、运维的时间...
  7. 数据库 SQL语法二
  8. 让驰骋工作流程引擎 ccbpm使用自定义表单来实现自己的业务逻辑.
  9. html5商品列表页tab,基于vue的tab-list类目切换商品列表组件的示例代码
  10. 机智云开源框架二次开发之换皮肤,几乎不用改代码
  11. Java取交集方法retainAll()
  12. java setmethod_java.util.zip.ZipEntry.setMethod(int method)方法示例
  13. 安卓9安装xpose
  14. 正态分布的峰度和偏度分别为_关于偏度与峰度的一些探索
  15. 什么是DNS,作用是什么?
  16. Win系统 - 该扩展程序并未列在Chrome应用商店中怎么样办?
  17. [转载] Flex 4 皮肤功能介绍
  18. java 实现仿word2007字数统计功能
  19. Oracle怎么安装
  20. S3 Drive支持以及FIPS 140-2兼容性

热门文章

  1. Oracle数据库经典50题(附答案),写完不理解的来打我
  2. GBase数据库日常运维操作(一)
  3. IntelliJ IDEA代码格式化,代码超出规定宽度自动换行
  4. 百度之星冠军分享:AI图像赛事入门
  5. 【论文精读】TransE 及其实现
  6. oracle mysql认证考试流程_Oacle认证考试:Oracle移植到MySQL注意事项
  7. MVPArms框架学习遇到的一个问题——普通Activity配合Fragment出现空指针
  8. 用什么软件录屏最好?录制高清视频无水印,简单几步就学会!
  9. adobe黑体std能商用_请问Adobe 黑体 Std R能免费商用吗?
  10. IM即时通讯项目框架分析