linux 之文网络编程基础 (一)、网络编程基本概念

1. 计算机网络基础

1.1 计算机网络的要求

1958年,出于军事考虑, 美国国会成立ARPA,目的是造出计算机网络,要求是:
在这里插入图片描述

1.2 分组交换

在各种网络应用中,端系统彼此交换报文( message) 。 报文能够包含协议设计者需要的任何东西 。报文可以执行一种控制功能(例如,图 1-2 所示例子中的"你好"报文) ,也可以包含数据,例如电子邮件数据、 JPEG 匮|像或 MP3音频文件 。 为了从源端系统向目的端系统发送一个报文,源将长报文划分为较小的数据块,称之为分组( packet) 。

在源和目的之间,每个分组都通过通信链路和分组交换机 (packel swùch)(交换机主要有两类:路由器和链路层交换机)传送 。分组以等于该链路最大传输速率的速度传输通过通信链路 。 因此,如果某源端系统或分组交换机经过-条链路发送一个 L 比特的分组,链路的传输速率为 R 比特/秒,则传输该分组的时间为 L/R 秒

1.3 交换方式

多数分组交换机在链路的输入端使用存储转发传输机制 。节点收到分组,先暂时存下来,再检查首部,按照首部中的目的地址,找到何时的节点转发出去。
在这里插入图片描述

2. 七层模型

在这里插入图片描述
计算机网络分层的目的:
将复杂的事情,切割成一个一个小片,每一次做好了,数据包就能正确的组成、发送、拆包、接收。

3. 四层模型

在这里插入图片描述

  • 链路层:只会对mac地址进行判断,组包。负责帧与帧的收发。(源mac、目的mac。)
  • 网络层:只会对ip 地址进行判断,组包,决定给哪个主机。主机到主机的收发。( 源ip、目的ip)
  • 传输层:只会对端口号进行判断,组包,决定给哪个程序。端到端(进程到进程)的收发。(源端口、目的端口。)
  • 应用层:
    在这里插入图片描述

5、协议的概念

固定的数据格式,两方都遵循,接受者才能接收到、知道怎么解析。

各个层对应的常用协议:
在这里插入图片描述
在这里插入图片描述

  • 关机后,再开机,ip地址不变,就是通过RARP协议实现的。即通过MAC地址,向路由器获得之前分配的IP地址。
  • 每一个网卡都有一个mac地址,A给B发送消息,必须携带B的mac地址,否则无法发送信息。可以通过ip发送数据包获得。
  • 应用层协议很多。传输层只有两个。Ping命令用的是ICMP协议。一般网络层使用IP协议。
  • 我们需要将协议的报头给记住。TCP UDP IP MAC

4. 网卡

  • 网卡是俗称,真实名字叫网络适配器
  • 作用:用来发送接收数据,将模拟信号转成数字信号。

每块网卡都有一个全球唯一的表示id。这个全球唯一的标识id号就是mac地址。Mac地址有48位,6个字节。Mac地址是用来标识网卡的物理地址,物理地址是不可以改变的。

注意:我们电脑里,打开网络,会看到两个网卡 wlan 和 以太网。

5.ip地址

5.1 ip地址概念

用来标识主机或网卡的虚拟IP。

  • Ipv4 :32位
  • IPv6 :128位(解决IP地址不够用的问题)

IP由两部分组成,子网id、主机id两部分组成,也就是结合子网掩码才能确定IP地址。

//查看ip mac地址
Ifconfig 

5.2 ip分类

在这里插入图片描述

  • 共有IP:直接能够连接外网的IP。
  • 私有IP:需要通过公网后才能连接外网的IP。(由interNIC 统一规划的IP。)
  • 回环地址:使用回环地址,数据包经过引用层 传输层
    网络层以后,不经过链路层,直接再回到应用层。通常回环IP为:127.0.0.1。访问本主机、测试协议栈是否好使。
    在这里插入图片描述
    设置ip地址命令
Eth0 网卡   netmask 子网掩码

在这里插入图片描述

5. 子网掩码

由连续的1或者连续的0组成。 Ip地址由:子网id、主机id两部分组成。子网掩码的作用就是用来区分这两部分。
在这里插入图片描述
例如:如果已经知道一个主机的IP为10.1.2.2,如果想要知道它的主机ID和子网ID,必须要知道它的子网掩码。 例如上个IP,与子网掩码就行匹配,对应子网掩码1的就是该IP的子网IP,对应IP为0的就是该IP的主机IP。

因为一个IP共占4个字节,假如子网ID占3个字节的话,即子网掩码为:255.255.255.0。 那么该子网最多能连接的主机数为:2的8次方-2。(因为一个字节8位,因此有2的8次组合,但是主机id全为0和全为1 的两个IP 不可以使用,因此减2。全为0是网段地址,全为1是广播地址。)

设置IP地址命令:

Eth0 网卡   netmask 子网掩码

6. 网关

占用该网段的一个ip地址。它负责将数据转发到外网。也就是在局域网中找不到通信的ip地址的时候,就会将这个数据交给网关。网关负责将找不到的ip的交给写一个路由器。(网关一般放在路由器上。)

7.端口

端口

接收到一个数据包后,先经过链路层,判断是否发给我的mac地址,是的话,通过网络层,判断是否发给我的ip地址,是的话,经过传输层,判断发给哪个端口号,每个端口号对应一个应用程序。(端口号实际上标识一个进程的缓冲区。)

每一个网络应用程序必须有一个端口号标识。端口是唯一的,但是端口可以重用。重用是指:本来QQ占用端口号3000,当QQ退出后,别的程序可以占用这个端口号。
最大端口号:0-65535

为什么不用进程号标识进程?而专门用端口号标识?
如果使用进程号,关机后,再次打开这个进程,进程号就变了。就像写信,目的地址一直在变化。而端口号可以保证这一点,一个软件的端口号一般不变。

知名端口号:一些知名的软件有固定的端口号(0-1023),别的程序不能再用。例如:

  • Ssh: 22(默认端口号)
  • Web服务器: 80(默认端口号)

动态端口号:1024-65535

7.组包过程和拆包过程

在这里插入图片描述主机A 通过飞秋向 主机B 发送 hello的 组包拆包流程。
在这里插入图片描述注意:
在这里插入图片描述

只要两个进程通过网络通信,数据包头一定有这14个字节。

8 B/S 、C/S 模型

在这里插入图片描述

posted @ 2020-04-02 23:09  江南又一春  阅读(197)  评论(0编辑  收藏  举报