Skip to content

网络介绍

网络就是一种辅助双方或者多方能够连接在一起的工具, 试想一下,如果没有网络,这个世界将会是什么样子的。

单机游戏

assets

使用网络的目的

assets

网络编程的目的是为了联通多方然后进行通信用的,即把数据从一方传递给另外一方。 之前学习编写的程序都是单机的,即不能和其他电脑上的程序进行通信。 为了让在不同的电脑上运行的软件,之间能够互相传递数据,就需要借助网络的功能。

网络通信过程

如果两台电脑之间通过网线连接是可以直接通信的,但是需要提前设置好 ip 地址, 并且 ip 地址需要控制在同一网段内。

例如一台为 192.168.1.1 另一台为 192.168.1.2 则可以进行通信。

img

实际上,我们在访问互联网是,也是同样的原理,因为整个世界都处于同一个大的互联网之中。

  1. 在浏览器中输入一个网址时,需要将它先解析出 ip 地址来
  2. 当得到 ip 地址之后,浏览器以 tcp 的方式 3 次握手链接服务器
  3. 以 tcp 的方式发送 http 协议的请求数据给服务器
  4. 服务器 tcp 的方式回应 http 协议的应答数据给浏览器
  5. 浏览器再将得到的内容展示出来

网络链接图

注意

底层细节(了解)

  • MAC地址:在设备与设备之间数据通信时用来标记收发双方(网卡的序列号)
  • IP地址:在逻辑上标记一台电脑,用来指引数据包的收发方向(相当于电脑的序列号)
  • 网络掩码:用来区分ip地址的网络号和主机号
  • 默认网关:当需要发送的数据包的目的ip不在本网段内时,就会发送给默认的一台电脑,成为网关
  • 集线器:已过时,用来连接多态电脑,缺点:每次收发数据都进行广播,网络会变的拥堵
  • 交换机:集线器的升级版,有学习功能知道需要发送给哪台设备,根据需要进行单播、广播
  • 路由器:连接多个不同的网段,让他们之间可以进行收发数据,每次收到数据后,ip不变,但是MAC地址会变化
  • DNS:用来解析出IP(类似电话簿)
  • http 服务器:提供浏览器能够访问到的数据

TCP/IP

网络通信是借助于 TCP/IP 协议族,TCP/IP (Transmission Control Protocol/Internet Protocol)即传输控制协议/网间协议,定义了主机如何连入因特网及数据如何再它们之间传输的标准,

从字面意思来看 TCP/IP 是 TCP 和 IP 协议的合称,但实际上 TCP/IP 协议是指因特网整个 TCP/IP 协议族。不同于 ISO 模型的七个分层,TCP/IP 协议参考模型把所有的 TCP/IP 系列协议归类到四个抽象层中

应用层:TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet 等等

传输层:TCP,UDP

网络层:IP,ICMP,OSPF,EIGRP,IGMP

数据链路层:SLIP,CSLIP,PPP,MTU

每一抽象层建立在低一层提供的服务上,并且为高一层提供服务,看起来大概是这样子的

assets

assets

TCP/IP 介绍

上世纪 70 年代,随着计算机技术的发展,计算机使用者意识到:要想发挥计算机更大的作用,就要将世界各地的计算机连接起来。但是简单的连接是远远不够的,因为计算机之间无法沟通。因此设计一种通用的“语言”来交流是必不可少的,这时 TCP/IP 协议就应运而生了。

TCP/IP(Transmission Control Protocol/Internet Protocol)是传输控制协议和网络协议的简称,它定义了电子设备如何连入因特网,以及数据如何在它们之间传输的标准。

TCP/IP 不是一个协议,而是一个协议族的统称,里面包括了 IP 协议、ICMP 协议、TCP 协议、以及 httpftppop3 协议等。网络中的计算机都采用这套协议族进行互联。

1. ip 地址

网络上每一个节点都必须有一个独立的 IP 地址,通常使用的 IP 地址是一个 32bit 的数字,被 . 分成 4 组,例如,255.255.255.255 就是一个 IP 地址。有了 IP 地址,用户的计算机就可以发现并连接互联网中的另外一台计算机。

在 Linux 系统中,可以用 ifconfig -awimdowsipconfig )命令查看自己的 IP 地址:

Snipaste_2019-05-18_02-03-07

什么是地址

什么是地址

地址就是用来标记地点的

互联网的服务:ip + port 去进行访问的

2. 端口号

IP 地址是用来发现和查找网络中的地址,但是不同程序如何互相通信呢?这就需要端口号来识别了。如果把 IP 地址比作银行 ,端口就是出入这间房子的服务窗口。真正的银行只有几个服务窗口,但是端口采用 16 比特的端口号标识,一个 IP 地址的端口可以有 65536(即:2^16)个之多!

服务器的默认程序一般都是通过人们所熟知的端口号来识别的。

例如,对于每个 TCP/IP 实现来说,

  • SMTP(简单邮件传输协议)服务器的 TCP 端口号都是 25
  • FTP(文件传输协议)服务器的 TCP 端口号都是 21
  • TFTP(简单文件传输协议)服务器的 UDP 端口号都是 69
  • MySQL(mysql数据库)服务器的TCP端口默认为 3306
  • Redis(redis数据库)服务器默认TCP端口为 6379

任何 TCP/IP 实现所提供的服务都用众所周知的 1-1023 之间的端口号。这些人们所熟知的端口号由 Internet 端口号分配机构(Internet Assigned Numbers Authority, IANA)来管理。

端口

3. 域名

用 12 位数字组成的 IP 地址很难记忆,在实际应用时,用户一般不需要记住 IP 地址,互联网给每个 IP 地址起了一个别名,习惯上称作域名。

域名与计算机的 IP 地址相对应,并把这种对应关系存储在域名服务系统 DNS(Domain Name System) 中,这样用户只需记住域名就可以与指定的计算机进行通信了。

常见的域名包括 com、net 和 org 三种顶级域名后缀,除此之外每个国家还有自己国家专属的域名后缀(比如我国的域名后缀为 cn)。目前经常使用的域名诸如百度(www.baidu.com)、Linux 组织(www.lwn.net)等等。

我们可以使用命令 nslookup 或者 ping 来查看与域名相对应的 IP 地址。

例如:

ping

关于域名与 IP 地址的映射关系,以及 IP 地址的路由和发现机制,暂时不详细介绍。

TCP/IP 协议

我们一直处在网络的世界中,理所当然地认为底层的一切都可以正常工作。现在,我们来真正地深入底层,看看那些维持系统运转的东西到底是什么样。

因特网是基于规则的,这些规则定义了如何创建连接、交换数据、终止连接、处理超时等。这些规则被称为 协议 ,它们分布在不同的层中。分层的目的是兼容多种实现方法。你可以在某一层中做任何想做的事,只要遵循上一层和下一层的约定就行。

最底层处理的是电信号,其余层都基于下面的层构建而成。在大约中间的位置是 IP(因特网协议)层,这层规定了网络位置和地址的映射方法以及数据包(块)的传输方式。IP 层的上一层有两个协议描述了如何在两个位置之间移动比特。

  • TCP(传输控制协议

    这个协议被用来进行长时间的连接。它会发送比特流并确保它们都能按序到达并且不会重复。

  • UDP(用户数据报协议

    这个协议被用来进行少量数据交换。一个 数据报 是一次发送的很少信息,就像明信片上的一个音符一样。

UDP 信息并不需要确认,因此你永远无法确认它是否到达目的地。

面向连接

socket 的概念

到目前为止我们学习了 ip 地址和端口号还有 tcp 传输协议,为了保证数据的完整性和可靠性我们使用 tcp 传输协议进行数据的传输,为了能够找到对应设备我们需要使用 ip 地址,为了区别某个端口的应用程序接收数据我们需要使用端口号,那么通信数据是如何完成传输的呢?

使用 socket 来完成

socket (简称 套接字) 是 进程之间通信一个工具,好比现实生活中的 插座,所有的家用电器要想工作都是基于插座进行, 进程之间想要进行网络通信需要基于这个 socket

插座效果图:

插座

socket 效果图:

socket

负责进程之间的网络数据传输,好比数据的搬运工。

不夸张的说,只要跟 网络相关的应用程序或者软件都使用到了 socket

socket使用场景

进程之间网络数据的传输可以通过 socket 来完成, socket 就是进程间网络数据通信的工具。

assets