计算机网络基础

发布时间 2023-04-23 02:06:22作者: coder雪山

一 网络通信原理

1、cs架构与BS架构
Client<------->server

客户端软件(send) 服务端软件(recv)
操作系统 操作系统
计算机硬件<--------------------> 计算机硬件

Browser(浏览器)<----------------------->server
2、 互联网的本质就是一系列的网络协议

一台硬设有了操作系统,然后装上软件你就可以正常使用了,然而你也只能自己使用

像这样,每个人都拥有一台自己的机器,然而彼此孤立

一系列统一的标准,这些标准称之为互联网协议,互联网的本质就是一系列的协议,总称为‘互联网协议’(Internet Protocol Suite).

互联网协议的功能:定义计算机如何接入internet,以及接入internet的计算机通信的标准。

网络=物理链接介质+互联网通信协议
3 osi七层协议

互联网协议按照功能不同分为osi七层或tcp/ip五层或tcp/ip四层

每层运行常见物理设备

OSI七层协议数据传输的封包与解包过程 

4 tcp/ip五层模型讲解

我们将应用层,表示层,会话层并作应用层,从tcp/ip五层协议的角度来阐述每层的由来与功能,搞清楚了每层的主要协议

就理解了整个互联网通信的原理。

首先,用户感知到的只是最上面一层应用层,自上而下每层都依赖于下一层,所以我们从最下一层开始切入,比较好理解

每层都运行特定的协议,越往上越靠近用户,越往下越靠近硬件

4.1 物理层

物理层负责发送电信号
一组物理层数据称之为:位
单纯的电信号毫无意义,必须对其进行分组

4.2 数据链路层:ethernet以太网协议

规定1:一组数据称之为一个数据帧
规定2:数据帧分成两部分---->头+数据
头包含:源地址与目标地址,该地址是mac地址
数据包含:包含的是网络层发过来的整体的内容

规定3:规定但凡接入互联网的主机必须有一块网卡,每块网卡在出厂时都烧制好一个全世界独一无二的地址,
该地址称之为mac地址,就是网卡地址。

注意:计算机通信基本靠吼,既以太网协议的工作方式是广播

4.3 网络层:IP协议

要达到的目的:
划分广播域
每一个广播域但凡要接通外部,一定要有一个网关帮内部的计算机转发包到公网
网关与外界通信走的是路由协议

 



规定1:一组数据称之为一个数据包
规定2:数据帧分成两部分---》头+数据
头包含:源地址与目标地址,该地址是IP地址
数据包含的:传输层发过来的整体的内容

一个合法的ipv4地址组成部分=ip地址/子网掩码地址
子网掩码是判断两个ip地址是不是在同一个局域网

计算机1: 计算机2:

应用层 应用层
传输层 传输层
网络层 网络层
数据链路层 数据链路层层
物理层<---------二层交换机------------>物理层

(源mac地址,xxx)(源ip地址,目标ip地址)数据
(源mac地址,网关的mac地址)数据

事先知道的是对方的ip地址
但是计算机的底层通信是基于ethernet以太网协议的mac地址通信

ARP;
所以必须能够将ip地址解析成mac地址

# 两台计算机在同一个局域网
计算机1 直接 计算机2
ARP:
自己的ip,对方的ip
1)、计算二者网络地址,如果一样,拿到计算机2的mac地址就可以
2)、发送广播包
发送端主机 发送端mac FF:FF:FF:FF:FF:FF 172.16.10.10/24 172.16.10.11/24 数据


# 两台计算机不在同一个局域网内
计算机1 网关 计算机2

ARP:
自己的ip,对方的ip
1、计算机二者网络地址,如果不一样,应该拿到网关的mac地址
2、发送广播包
发送端主机 发送端mac FF:FF:FF:FF:FF:FF 172.16.10.10/24 172.16.10.11/24 数据

总结******
ip地址+mac地址---》标识全世界范围内独一无二的一台计算机

或者:
ip地址---》标识全世界范围内独一无二的一台计算机(ip和ARP协议,把ARP协议隐藏了)

计算机2的ip在局域网内是私网ip,要通过公网ip映射关系,才能访问计算机2

4.4传输层:TCP\UDP

传输层功能:建立端口到端口的通信
端口范围0-65535,0-1023为系统占用端口

ip+port---->标识全世界范围内独一无二的一个基于网络通信的应用程序

 


基于tcp协议通信之前:必须建立一个双向通信的链接(管道)
C---------->S
C<----------S
三次握手建立链接
建立链接是为了传数据做准备的,三次握手即可
   建链接阶段:客户端发送SYN_SENT,seq=x,x是一段识别编码,ACK=x+1是回复编码,服务端确认和请求同时返回给客户端,
所以三次握手,类似于情侣建立恋爱关系。这个阶段服务端大多数时间是listen阶段,客户端大多数时间是ESTABLISHED阶段。
如果客户端处于SYN_RCVD阶段,有可能被洪水攻击,假的请求,如果是真的请求,就是处于高并发阶段。
  数据传输阶段:发送一个数据包,对方要确定后才算完成,所以TCP协议是可靠传输
  断链接阶段:上述图,服务端和客户端要换位置,一般是服务端提出断链接,应为服务端还要服务其他客户端。为什么是四次
挥手,服务端发送断链接请求时,客户端收到后,因为数据还再传输,只有先发确认后,等数据传输完毕后,再给服务端发请求断链接,
服务端再发确认断链接,所以是四次握手断链接,类似情侣分手,收到分手的一方要考虑一下,再发送我们分手。如果客户端一直处于
TIME_WAIT阶段,说明客户端处于高并发阶段。

四次挥手断开链接
断开链接时,由于链接内有数据传输,所以必须分四次断开

TCP是可靠传输的
发送数据必须等到对方确定后才算完成,才会将自己内存中的数据清理掉,否则重传

ps:当服务端大量处于TIME_WAIT状态时意味着服务端正在经历高并发

TCP协议的半链接池:
backlog
[链接请求1,链接请求2,链接请求3]

4.5 应用层

应用层由来:用户使用的都是应用程序,均工作于应用层,互联网是开发的,大家都可以开发自己的应用程序,数据多种多样,必须规定好数据的组织形式 

应用层功能:规定应用程序的数据格式。

例:TCP协议可以为各种各样的程序传递数据,比如Email、WWW、FTP等等。那么,必须有不同协议规定电子邮件、网页、FTP数据的格式,这些应用程序协议就构成了”应用层”。

可以自定义协议---》头部+数据部分
自定义协议需要注意的问题:
1、两大组成部分=头部+数据部分
头部:放对数据的描述信息
比如:数据要发给谁,数据的类型 ,数据的长度
数据部分:想要发的数据

2、头部的长度必须固定
因为接收端要通过头部获取所接受数据的详细信息

可以自定义协议---》头部+数据部分
http https ftp

4.6 socket

我们知道两个进程如果需要进行通讯最基本的一个前提能能够唯一的标示一个进程,在本地进程通讯中我们可以使用PID来唯一标示一个进程,但PID只在本地唯一,网络中的两个进程PID冲突几率很大,这时候我们需要另辟它径了,我们知道IP层的ip地址可以唯一标示主机,而TCP层协议和端口号可以唯一标示主机的一个进程,这样我们可以利用ip地址+协议+端口号唯一标示网络中的一个进程。

能够唯一标示网络中的进程后,它们就可以利用socket进行通信了,什么是socket呢?我们经常把socket翻译为套接字,socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信。

socket起源于UNIX,在Unix一切皆文件哲学的思想下,socket是一种"打开—读/写—关闭"模式的实现,服务器和客户端各自维护一个"文件",在建立连接打开后,可以向自己文件写入内容供对方读取或者读取对方内容,通讯结束时关闭文件。

总结:

ethernet头+ip头+tcp头+应用层的头+应用层数据

二 网络通信实现

想实现网络通信,每台主机需具备四要素

  • 本机的IP地址
  • 子网掩码
  • 网关的IP地址
  • DNS的IP地址

获取这四要素分两种方式

1.静态获取

即手动配置

2.动态获取

通过dhcp获取

以太网头 ip头 udp头 dhcp数据包


(1)最前面的”以太网标头”,设置发出方(本机)的MAC地址和接收方(DHCP服务器)的MAC地址。前者就是本机网卡的MAC地址,后者这时不知道,就填入一个广播地址:FF-FF-FF-FF-FF-FF

(2)后面的”IP标头”,设置发出方的IP地址和接收方的IP地址。这时,对于这两者,本机都不知道。于是,发出方的IP地址就设为0.0.0.0,接收方的IP地址设为255.255.255.255。

(3)最后的”UDP标头”,设置发出方的端口和接收方的端口。这一部分是DHCP协议规定好的,发出方是68端口,接收方是67端口。


 这个数据包构造完成后,就可以发出了。以太网是广播发送,同一个子网络的每台计算机都收到了这个包。因为接收方的MAC地址是FF-FF-FF-FF-FF-FF,看不出是发给谁的,所以每台收到这个包的计算机,还必须分析这个包的IP地址,才能确定是不是发给自己的。当看到发出方IP地址是0.0.0.0,接收方是255.255.255.255,于是DHCP服务器知道”这个包是发给我的”,而其他计算机就可以丢弃这个包。


 接下来,DHCP服务器读出这个包的数据内容,分配好IP地址,发送回去一个”DHCP响应”数据包。这个响应包的结构也是类似的,以太网标头的MAC地址是双方的网卡地址,IP标头的IP地址是DHCP服务器的IP地址(发出方)和255.255.255.255(接收方),UDP标头的端口是67(发出方)和68(接收方),分配给请求端的IP地址和本网络的具体参数则包含在Data部分。

 

通过DHCP,新加入的计算机收到这个响应包,于是就知道了自己的IP地址、子网掩码、网关地址、DNS服务器等等参数


三 DNS域名解析

1 dns的作用(把ip+port转化成能记住的名字)

DNS的作用:在互联网中,其实没有类似于www.xxx.com这种域名方式,而替代的是以IP地址,如222.222.222.222,那我们在IE地址栏中应当输入222.222.222.222才能打开网站www.xxx.com,但我们细想一下,互联网上的网站成千上万,如果每个网站登陆都需要记住一大串数字,那是不是特别不方便,对于记忆力不强的人,根本无法记住这么烦琐的数字。这个时候DNS就出现了,它的作用就是将222.222.222.222解析为www.xxx.com,那么我们登陆的时候就直接输入域名就可以了。

为什么一定要设置DNS才能上网?有些朋友可能会发现,为什么我可能登陆QQ、MSN,但却打不开网页呢?其实大部分原因都是因为DNS服务器故障造成的,DNS服务器地址是唯一的,是运营商提供给终端用户用来解析IP地址及域名的关系,而如果不设定DNS服务器地址,那么就无法查询地址的去向,自然也就打不开网页,而QQ、MSN等即时聊天软件,采用的是UDP传输协议,即不可靠传输协议,无需提供DNS服务器地址,也同样可以登陆。

2 dns的两种查询方式

#一 :递归
主机向本地域名服务器的查询一般都是采用递归查询。所谓递归查询就是:如果主机所询问的本地域名服务器不知道被查询的域名的IP地址,
那么本地域名服务器就以DNS客户的身份,向其它根域名服务器继续发出查询请求报文(即替主机继续查询),而不是让主机自己进行下一步查询。
因此,递归查询返回的查询结果或者是所要查询的IP地址,或者是报错,表示无法查询到所需的IP地址。

# 二:迭代
本地域名服务器向根域名服务器的查询的迭代查询。迭代查询的特点:当根域名服务器收到本地域名服务器发出的迭代查询请求报文时,要么给出所要查询的IP地址,
要么告诉本地服务器:“你下一步应当向哪一个域名服务器进行查询”。然后让本地服务器进行后续的查询。根域名服务器通常是把自己知道的顶级域名服务器的IP地址告诉本地域名服务器,
让本地域名服务器再向顶级域名服务器查询。顶级域名服务器在收到本地域名服务器的查询请求后,要么给出所要查询的IP地址,要么告诉本地服务器下一步应当向哪一个权限域名服务器进行查询。
最后,知道了所要解析的IP地址或报错,然后把这个结果返回给发起查询的主机。 

 

 

 

 3 DNS解析流程举例

4 DNS缓存

DNS缓存指DNS返回了正确的IP之后,系统就会将这个结果临时储存起来。并且它会为缓存设定一个失效时间 (例如N小时),在这N小时之内,当你再次访问这个网站时,系统就会直接从你电脑本地的DNS缓存中把结果交还给你,而不必再去询问DNS服务器,变相“加速”了网址的解析。

当然,在超过N小时之后,系统会自动再次去询问DNS服务器获得新的结果。所以,当你修改了 DNS 服务器,并且不希望电脑继续使用之前的DNS缓存时,就需要手动去清除本地的缓存了。

5 DNS缓存分类

1)浏览器DNS缓存(内存中): 浏览器会按照一定频率缓存DNS记录

2)本地操作系统DNS缓存(内存中): 如果浏览器缓存中找不到需要的DNS记录,那就去操作系统找。

3)本地HOSTS文件(硬盘中): Windows系统中位于C:\Windows\System32\drivers\etc

4)路由器指定的DNS(远程): 路由器自动获取DNS地址,也可以手动修改-登录后台设置DNS服务器地址
  ps:路由器DNS被篡改会造成域名劫持,你访问的网址都会被定位到同一个位置,但是IP直接可以访问

5)ISP的DNS服务器(远程):  ISP(Internet Service Provider互联网服务提供商、联通电信移动),ISP有专门的DNS服务器应 对DNS查询请求 

6)根服务器(远程,跨国): ISP的DNS服务器还找不到的话,它就会向根服务器发出查询请求

6 浏览器DNS查找顺序

浏览器DNS缓存->本地系统DNS缓存->本地计算机HOSTS文件->ISP DNS缓存->递归or迭代搜索

期间如果查询到了,也就直接访问ip地址了,这个就像三级缓存原理一样,例如,能够在hosts文件中找到就不会再去查其他的

7 清除DNS缓存

打开cmd执行命令:ipconfig /all

全国通用DNS地址(国内用户推荐使用,速度较快!)
首先DNS服务器地址添:114.114.114.114  (位于北京人民英雄纪念碑)
备用DNS服务器地址添:114.114.115.115
全球通用DNS地址(此DNS地址为谷歌服务器的)
首选DNS服务器地址添:8.8.8.8
备用DNS服务器地址添:8.8.4.4

8 其他了解

13台根dns:

A.root-servers.net198.41.0.4美国
B.root-servers.net192.228.79.201美国(另支持IPv6
C.root-servers.net192.33.4.12法国
D.root-servers.net128.8.10.90美国
E.root-servers.net192.203.230.10美国
F.root-servers.net192.5.5.241美国(另支持IPv6
G.root-servers.net192.112.36.4美国
H.root-servers.net128.63.2.53美国(另支持IPv6
I.root-servers.net192.36.148.17瑞典
J.root-servers.net192.58.128.30美国
K.root-servers.net193.0.14.129英国(另支持IPv6)
L.root-servers.net198.32.64.12美国
M.root-servers.net202.12.27.33日本(另支持IPv6)

域名定义:http://jingyan.baidu.com/article/1974b289a649daf4b1f774cb.html

顶级域名:以.com,.net,.org,.cn等等属于国际顶级域名,根据目前的国际互联网域名体系,国际顶级域名分为两类:类别顶级域名(gTLD)和地理顶级域名(ccTLD)两种。类别顶级域名是                    以"COM"、"NET"、"ORG"、"BIZ"、"INFO"等结尾的域名,均由国外公司负责管理。地理顶级域名是以国家或地区代码为结尾的域名,如"CN"代表中国,"UK"代表英国。地理顶级域名一般由各个国家或地区负责管理。

二级域名:二级域名是以顶级域名为基础的地理域名,比喻中国的二级域有,.com.cn,.net.cn,.org.cn,.gd.cn等.子域名是其父域名的子域名,比喻父域名是abc.com,子域名就是www.abc.com或者*.abc.com.
一般来说,二级域名是域名的一条记录,比如alidiedie.com是一个域名,www.alidiedie.com是其中比较常用的记录,一般默认是用这个,但是类似*.alidiedie.com的域名全部称作是alidiedie.com的二级

四 网络通信流程 

1.本机获取

  • 本机的IP地址:192.168.1.100
  • 子网掩码:255.255.255.0
  • 网关的IP地址:192.168.1.1
  • DNS的IP地址:8.8.8.8

2.打开浏览器,想要访问Google,在地址栏输入了网址:www.google.com。

3.dns协议(基于udp协议)

 

4.HTTP部分的内容,类似于下面这样:

 

GET / HTTP/1.1
Host: www.google.com
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 6.1) ……
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding: gzip,deflate,sdch
Accept-Language: zh-CN,zh;q=0.8
Accept-Charset: GBK,utf-8;q=0.7,*;q=0.3
Cookie: … …

 

我们假定这个部分的长度为4960字节,它会被嵌在TCP数据包之中。

 

5 TCP协议

 

TCP数据包需要设置端口,接收方(Google)的HTTP端口默认是80,发送方(本机)的端口是一个随机生成的1024-65535之间的整数,假定为51775。

TCP数据包的标头长度为20字节,加上嵌入HTTP的数据包,总长度变为4980字节。

 

6 IP协议

 

然后,TCP数据包再嵌入IP数据包。IP数据包需要设置双方的IP地址,这是已知的,发送方是192.168.1.100(本机),接收方是172.194.72.105(Google)。

IP数据包的标头长度为20字节,加上嵌入的TCP数据包,总长度变为5000字节。

 

7 以太网协议

 

最后,IP数据包嵌入以太网数据包。以太网数据包需要设置双方的MAC地址,发送方为本机的网卡MAC地址,接收方为网关192.168.1.1的MAC地址(通过ARP协议得到)。

以太网数据包的数据部分,最大长度为1500字节,而现在的IP数据包长度为5000字节。因此,IP数据包必须分割成四个包。因为每个包都有自己的IP标头(20字节),所以四个包的IP数据包的长度分别为1500、1500、1500、560。

8 服务器端响应

 

经过多个网关的转发,Google的服务器172.194.72.105,收到了这四个以太网数据包。

根据IP标头的序号,Google将四个包拼起来,取出完整的TCP数据包,然后读出里面的”HTTP请求”,接着做出”HTTP响应”,再用TCP协议发回来。

本机收到HTTP响应以后,就可以将网页显示出来,完成一次网络通信。

总结:https://i.cnblogs.com/posts/edit;postId=17344739         //i.cnblogs.com:域名(IP+PORT)  /posts/edit;postId=17344739 :ulr资源路径,应用层是HTTPS协议