7.1网络基础知识

总目录:https://blog.csdn.net/qq_41106844/article/details/105553392

网络基础 - 子目录:https://blog.csdn.net/qq_41106844/article/details/105553339

什么是C/S架构

C/S架构全称是Client/Server架构,既客户端/服务端,用来实现服务端软件与客户端软件基于网络通信.。

之后我们来看一下他们之间的通信流程:

1、客户端软件产生数据,存放于客户端软件的内存中,然后调用接口将自己内存中的数据发送/拷贝给操作系统内存

2、客户端操作系统收到数据后,按照客户端软件指定的规则(即协议)、调用网卡发送数据

3、网络传输数据

4、服务端软件调用系统接口,想要将数据从操作系统内存拷贝到自己的内存中

5、服务端操作系统收到指令后,使用与客户端相同的规则(即协议)从网卡接收到数据,然后拷贝给服务端软件

相当于小明发布了一篇博文,博文先会从APP占用的内存拷贝到手机的内存中,之后按照协议通过网络传输给服务器,服务器按照协议解读了文字,之后拷贝到服务器内。

 

网络的定义

在这样的传输过程中,内存之间的互相转换我们都很清楚,那么,网络传输是怎么传输的,网络又是什么。

网络的起源

20世纪50年代末,正处于冷战时期。当时美国军方为了自己的计算机网络在受到袭击时,即使部分网络被摧毁,其余部分仍能保持通信联系,便由美国国防部的高级研究计划局(ARPA)建设了一个军用网,叫做“阿帕网”(ARPAnet)。阿帕网于1969年正式启用,当时仅连接了4台计算机,供科学家们进行计算机联网实验用,这就是因特网的前身。

到70年代,ARPAnet已经有了好几十个计算机网络,但是每个网络只能在网络内部的计算机之间互联通信,不同计算机网络之间仍然不能互通。为此, ARPA又设立了新的研究项目,支持学术界和工业界进行有关的研究,研究的主要内容就是想用一种新的方法将不同的计算机局域网互联,形成“互联网”。研究人员称之为“internetwork”,简称“Internet”,这个名词就一直沿用到现在。

 

但是实际上那个时候,多方面纠纷下,不同的机构的网络交互模式不一样,比如第一个网络模型是IBM公司提出的SNA模型,之后还有Digital公司的DNA,美国国防部的TCP/IP,让我们记住TCP/IP,他是我们的主角。

交互模式大白话一点就是不同计算机交流的语言,SNA模型可以比喻成韩文,DNA模型可以比如成另一种语言,使用不同的模型就必须使用其公司的产品。

 

OSI/RM模型

为了避免纷争,国际标准化组织ISO于1977年成立了一个委员会,在现有网络的基础上,提出了不基于具体机型、操作系统或公司的网络体系结构,称为开放系统互联模型,既OSI/RM模型。

 
20155953-b32802c343a76d0d.png
 

OSI/RM模型我们简单了解一下就可以,接下来我们主要看TCP/IP模型

TCP/IP模型

TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议)是指能够在多个不同网络间实现信息传输的协议簇。

为什么国际标准化组织建立了OSI/RM模型,但是我们现在网络的主角还是TCP/IP呢。

最主要的一点还是,OSI/RM模型出现的太晚了,在当时人们已经认可了TCP/IP模型,开始大范围使用它,最开始的初衷就是为了设计一个大家都认可的网络模型,既然已经有了那就没有必要再换了。

 

TCP/IP模型和OSI/RM模型的对照关系:

 
20155953-dac34e56a26fb9a4.png
 

他们与协议栈的对照表:

 
20155953-973a17481ec012df.png
 

硬件设备对照图:

 
20155953-9fdc9ba94d73b7be.png
 

然后我们来说这五层:

物理层

由来:对计算机进行组网。

物理层就是负责连接各个计算机的物理设备,包括但不限于:双绞线,光缆,无线电波。

传输的信号便是01010的二进制,高压代表1,低压代表0。

数据链路层

由来:如果一直传输0101010也没有办法区分到底是什么意思,所以需要对这些位进行分组。

数据链路层负责对电信号进行分组。

他遵从的协议便是以太网协议,以太网协议的包头部分需要自身MAC地址和目标MAC地址来确认发送者和接受者,同时协议包在网络中的传输遵从IEEE802.1Q。

以太网协议ethernet:

一组电信号构成一个数据包,叫做‘帧’

每一数据帧分成:报头head和数据data两部分

  head包含:(固定18个字节)

            发送者/源地址,6个字节

            接收者/目标地址,6个字节

            数据类型,6个字节

  data包含:(最短46字节,最长1500字节)

 

数据包的具体内容

head长度+data长度=最短64字节,最长1518字节,超过最大限制就分片发送

mac地址:

ethernet规定接入internet的设备都必须具备网卡,发送端和接收端的地址便是指网卡的地址,即mac地址

mac地址:每块网卡出厂时都被烧制上一个世界唯一的mac地址,长度为48位2进制,通常由12位16进制数表示(前六位是厂商编号,后六位是流水线号)

广播:

有了mac地址,同一网络内的两台主机就可以通信了(一台主机通过arp协议获取另外一台主机的mac地址)

ethernet采用最原始的方式,广播的方式进行通信,即计算机通信基本靠吼

 
20155953-f6105ddc76c1eb23.png
 

 

网络层

由来:我们通过数据链路层知道数据包是通过广播传输出去的,那么假如我们有一个五万台计算机的网络,a要给b传消息,他要吼一嗓子让其他四万多台计算机也听到,时间长了你的网络络自己都受不了。这就需要对计算机进行划分了。

 

 
20155953-ce4885229f964281.png
 

必须规定一种方式用来规划计算机的广播域,同时mac地址因为他是厂商指定的,他只和厂商有关,这时IP地址就诞生了。

网络层负责管理IP地址。

ip地址有几个概念:

IP地址:

规定网络地址的协议叫ip协议,它定义的地址称之为ip地址。

广泛采用的ipv4,它规定网络地址由2的(4+1)次方个二进制表示。ipv6同理。  

范围0.0.0.0-255.255.255.255

一个ip地址通常写成四段十进制数,例:127.0.0.1

子网掩码:

子网掩码是表示子网络特征的一个参数。

它在形式上等同于IP地址,也是一个32位二进制数字,它的网络部分全部为1,主机部分全部为0。

例如:IP地址172.16.10.1,如果已知网络部分是前24位,主机部分是后8位,那么子网络掩码就是11111111.11111111.11111111.00000000,写成十进制就是255.255.255.0。

子网掩码是用来标识一个IP地址的哪些位是代表网络位,以及哪些位是代表主机位。

子网掩码不能单独存在,它必须结合IP地址一起使用。子网掩码只有一个作用,就是将某个IP地址划分成网络地址和主机地址两部分。

划分子网本质上就是借主机位到给网络位,每借一位主机位,这个网段的可分配主机就会越少,比如192.168.1.0/24可用主机255个,借一位变成192.168.1.0/25,那可用主机就从255-128=127个了(从最大的值开始借),再借一位192.168.1.0/26,那可用主机数就变成了255-(128+64)=63个。

IP地址分类:

 IP地址是32位的二进制数值,用于在TCP/IP通讯协议中标记每台计算机的地址。通常我们使用点式十进制来表示,如192.168.0.5等等。

  每个IP地址又可分为两部分。即网络号部分和主机号部分:网络号表示其所属的网络段编号,主机号则表示该网段中该主机的地址编号。按照网络规模的大小,IP地址可以分为A、B、C、D、E五类。

A类地址:以0开头,第一个字节范围:0~127(1.0.0.0 - 126.255.255.255);

B类地址:以10开头,第一个字节范围:128~191(128.0.0.0 - 191.255.255.255);

C类地址:以110开头,第一个字节范围:192~223(192.0.0.0 - 223.255.255.255);

D类地址:以1110开头,它是一个专门保留的地址。

E类地址:以11110开头,为将来使用保留。

注意:

1)以下是留用的内部私有地址,Internet上没使用的地址

A类 10.0.0.0--10.255.255.255

B类 172.16.0.0--172.31.255.255

C类 192.168.0.0--192.168.255.255

2)IP地址与子网掩码相与得到网络号

3)主机号,全为0的是网络号(例如:192.168.2.0),主机号全为1的为广播地址(192.168.2.255)

4)环回地址:127.0.0.1

网络层有四个协议:IP协议,ARP协议,ICMP协议,IGMP协议

IP协议(网际协议):

IP协议是TCP/IP协议的核心,所有的TCP,UDP,IMCP,IGCP的数据都以IP数据格式传输。

 
20155953-881484eacf9bb780.png
报文

ARP协议(地址解析协议):

通信是基于mac的广播方式实现,计算机在发包时,获取自身的mac是容易的,如何获取目标主机的mac,就需要通过arp协议。

工作流程

1:首先,每个主机都会在自己的ARP缓冲区中建立一个ARP列表,以表示IP地址和MAC地址之间的对应关系。

2:当源主机要发送数据时,首先检查ARP列表中是否有对应IP地址的目的主机的MAC地址,如果有,则直接发送数据,如果没有,就向本网段的所有主机发送ARP数据包,该数据包包括的内容有:源主机 IP地址,源主机MAC地址,目的主机的IP 地址

3:当本网络的所有主机收到该ARP数据包时,首先检查数据包中的IP地址是否是自己的IP地址,如果不是,则忽略该数据包,如果是,则首先从数据包中取出源主机的IP和MAC地址写入到ARP列表中,如果已经存在,则覆盖,然后将自己的MAC地址写入ARP响应包中,告诉源主机自己是它想要找的MAC地址。

4:源主机收到ARP响应包后。将目的主机的IP和MAC地址写入ARP列表,并利用此信息发送数据。如果源主机一直没有收到ARP响应数据包,表示ARP查询失败。

ICMP协议(因特网控制报文协议):

它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。

当传送IP数据包发生错误--比如主机不可达,路由不可达等等,ICMP协议将会把错误信息封包,然后传送回给主机。给主机一个处理错误的机会.

我们一般主要用ICMP协议检测网络是否通畅,基于ICMP协议的工具主要有ping 和traceroute。

 

传输层

由来:我们已经知道怎么传数据包,怎么找到对方,但是我们每发一个包就要找一次对方吗,这样会让数据包的传输延迟太大,所以能不能有保持传输的功能,这就是传输层负责的东西。

说道传输层就离不开传输层的两大协议:TCP协议和UDP协议。

TCP协议(传输控制协议):

再说TCP协议前,先说说报文和TCP的握手。

 
20155953-df7d839889633d8e.png
报文

 

 
20155953-0cc9482d2b9a06bf.png
整个过程

三次握手:

客户端发送syn包(seq=x)到服务器,并进入SYN_SEND(发送)状态,等待服务器确认;

服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(seq=y),即SYN+ACK包,此时服务器进入SYN_RECV(接收)状态;

客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED(已建立)状态,完成三次握手。

四次握手:

主动关闭方发送一个FIN,用来关闭主动方到被动关闭方的数据传送,也就是主动关闭方告诉被动关闭方:我已经不 会再给你发数据了(当然,在fin包之前发送出去的数据,如果没有收到对应的ack确认报文,主动关闭方依然会重发这些数据),但是,此时主动关闭方还可 以接受数据。

被动关闭方收到FIN包后,发送一个ACK给对方,确认序号为收到序号+1。

被动关闭方发送一个FIN,用来关闭被动关闭方到主动关闭方的数据传送,也就是告诉主动关闭方,我的数据也发送完了,不会再给你发数据了。

主动关闭方收到FIN后,发送一个ACK给被动关闭方,确认序号为收到序号+1,至此,完成四次挥手。

对应的协议:

(1)FTP:定义了文件传输协议,使用21端口。

(2)Telnet:一种用于远程登陆的端口,使用23端口,用户可以以自己的身份远程连接到计算机上,可提供基于DOS模式下的通信服务。

(3)SMTP:邮件传送协议,用于发送邮件。服务器开放的是25号端口。

(4)POP3:它是和SMTP对应,POP3用于接收邮件。POP3协议所用的是110端口。

(5)HTTP:是从Web服务器传输超文本到本地浏览器的传送协议。

 

UDP协议(用户数据包协议):

和TCP不同,UDP不需要麻烦而又严格的校验,握手操作,他很直接,我找到你了,那我就开始把我要传给你的都一股脑传过去。没有维护,不需要校验,安全性差但是节省资源。

对应的协议:

(1)DNS:用于域名解析服务,将域名地址转换为IP地址。DNS用的是53号端口。

(2)SNMP:简单网络管理协议,使用161号端口,是用来管理网络设备的。由于网络设备很多,无连接的服务就体现出其优势。

(3) TFTP(Trival File Transfer Protocal),简单文件传输协议,该协议在熟知端口69上使用UDP服务。

 

应用层

直接和用户交互的层次,我们看到的界面,在传输是有一个编码和指定回话的过程。可以理解成打包+信戳的过程。

 

什么是socket

socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求。

 
20155953-c84c6ad607aad1d0.png
 

Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。

socket在某种意义上为我们封装好了tcp/udp,我们只需要遵循socket的规定去编程,写出的程序自然就是遵循tcp/udp标准的。

 

 
20155953-27738f27e915fff5.png
套接字工作流程

先从服务器端说起。服务器端先初始化Socket,然后与端口绑定(bind),对端口进行监听(listen),调用accept阻塞,等待客户端连接。

在这时如果有个客户端初始化一个Socket,然后连接服务器(connect),如果连接成功,这时客户端与服务器端的连接就建立了。

客户端发送数据请求,服务器端接收请求并处理请求,然后把回应数据发送给客户端,客户端读取数据,最后关闭连接,一次交互结束。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

寒 暄

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

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

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

打赏作者

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

抵扣说明:

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

余额充值