计算机网络基本知识

来源:互联网 发布:并行程序设计 书 知乎 编辑:程序博客网 时间:2024/06/05 18:21

1. 基本概念

1)宽带猫

ADSL(宽带)的猫准确的名称叫做“调制解调器”。它是在发送端通过调制将数字信号转换为模拟信号,而在接收端通过解调再将模拟信号转换为数字信号的一种装置。现在的光纤网络,大多都不再需要调制解调器。

2)集线器

集线器的英文称为“Hub”。“Hub”是“中心”的意思,集线器的主要功能是对接收到的信号进行再生整形放大,以扩大网络的传输距离,同时把所有节点集中在以它为中心的节点上。

3)路由器

路由器大家都知道,插进去网线,设定好拨号,可以给多台电脑共享网络了,一般路由器有两个部分组成,WAN和LAN,WAN是用来拨号的,是让路由自身能上网的一个部分,LAN是用来局域网内交换数据的,跟交换机的作用一样,我们的电脑插在LAN口才能上网。

4)交换机

是不能拨号的路由器,也就是说他只有LAN,没有WAN。

5)集线器和交换机区别

集线器采用的是共享带宽的工作方式,简单打个比如,集线器就好比一条单行道,“10M”的带宽分多个端口使用,当一个端口占用了大部分带宽后,另外的端口就会显得很慢。相反,交换机是一个独享的通道,它能确保每个端口使用的带宽,如百兆的交换机,它能确保每个端口都有百兆的带宽。正因为交换机比集线器有着明显的优势,目前的集线器可说绝迹市场了。

网络传输过程:

1)ISP(internet service provider)通过电话线将数据连接到猫;

2)猫经过调制解调将数据转换为计算机能识别的数据;

3)将转换出来的数据连接到路由器,路由器的WAN口用来实现拨号功能,LAN口用来扩展接口,以方便连接到多个计算机;

4)但是路由器的可扩展接口往往不够用,需要交换机来扩展更多的接口,交换机只有LAN口;

2. OSI参考模型

OSI(Open Systems Interconnection Reference Model)OSI/RM简称OSI开放系统互连参考模型,通俗的将就是我们说的7层协议的体系结构应用层表示层会话层传输层网络层链路层物理层

注意: 这七层是在发送数据到网线之前,在计算机中内部就已经经过了这7层,不是在传输过程中才慢慢经过这7层的。

应用层: 所有产生网络流量的程序。

表示层: 在传输数据之前进行的一些操作(加密,压缩,发送数据使用的编码等)。

例如:发送数据使用的是UTF-8来编码,而在浏览器用别的编码来解码,就会出现乱码,这就是表示层出现了问题。

会话层: 在传输数据时,需要通道,就需要创建会话,以防请求方和目标方不知道谁是谁。

例如:访问百度,则会与主机上存放百度网页的地址创建了会话,请求接收到了全部数据,则会话结束。

传输层: 就是传输数据的过程,因为有了前面表示层和会话层做的一些事情,已经具备传输数据的条件了。

可靠传输:通过网址访问主机之间,进行的传输是一来一往,而且进行多次交流,多个数据包;

不可靠传输:通过网址到DNS解析器解析域名真实地址的过程,就是不可靠传输,只需要一个数据包,去一个,回一个就完成了。

网络层: 规划最佳路径,规划ip地址,

传输数据到目标地址的过程中,经过哪些路由器,也就是走什么路径,就是网络层做的事情。

数据链路层: 对数据帧的开始与结束 差错校验。

发送数据是分组发送的,不是一次性发送,每次发送一组数据,如何知道这一组数据就是我们发的呢?就需要在数据的开始和结束定义一个特殊的东西,让路由器或交换机知道该数据什么时候开始,什么时候结束。

差错校验,在接受完一组数据后,校验数据是否完整,如果有问题,则丢掉,让计算机重新发一次。

物理层: 定义网络接口标准

网线的水晶头,里面都是8根线,0101如果定义,用1V代表1,0V代表0,类似这样规定,不可能一个商家50V代表1,这样1V那个规定将会出现问题。

TCP/IP的体系结构分为4层: 网络接口层(物理层、链路层)、网际层(网络层IP)、传输层(UDP/TCP)、应用层(会话层、表示层、应用层)

原理体系结构: 物理层、链路层、网络层、传输层、应用层(会话层+表示层+应用层)

image

发送数据将数据封装起来,看看每个层次都做了什么事

image

看看数据封装之后的样子

image

image

3. 网络层

参考博客:网络层

IP地址:<网络地址> + <端口地址>

网络地址=IP地址和子网掩码进行运算

例如: 已知ip地址141.14.72.24,所在网络的子网掩码是255.255.192.0,试求其网络地址?

子网掩码:255.255.192.0 ————–11111111,11111111,11000000,00000000

IP地址:141.14.72.24 —————— 10001101,00001110,01001000,00011000

说明: 根据子网掩码知道ip地址的前18位为网络号,网络地址就为:10001101.00001110.01000000.00000000 转换为10进制就是141.14.64.0

网关: 路由器的IP地址

IP地址和MAC地址的区别?

MAC地址:物理地址

IP地址:网络中的地址

说明: 在网络中通过主机的IP地址,先找到他的网络地址,到达了网络地址后,然后通过该网络中的老大(路由器)来分析一下这个IP地址是你网路中的哪个主机,这时,老大(路由器)就通过该目标ip地址改到对应主机的MAC地址,既然知道了MAC地址,就能找到该计算机了。就好比什么呢。路由器是每次分配给你的IP地址不一样,但是你的MAC地址肯定不会变,所以就根据IP地址找到你的MAC地址。但是怎么找到的呢?就要通过网络层中的ARP(地址解析协议)解析了。

3. ARP协议

地址解析协议:通过IP地址来解析主机的MAC地址。

过程:

局域网来说,一个局域网中有很多主机,主机A想和局域网中的主机B通话,但是只知道对方的IP地址,所以他就通过发广播,给局域网中所有的主机,问这个IP地址是谁,主机B收到了这个信息,通过网络适配器(网卡)就发现自己是这个IP地址,然后就把自己的MAC地址发给源主机,这样就知道了MAC地址,就能够通信了。

跨网络中就不是直接发广播了,先通过IP地址找到对应的网络地址,如何找到的对应的网络地址呢,通过路由器,每个路由器都有三层。网络层、链路层、物理层,也就是说最高能够识别网络层中的东西来,那么路由器也就有ARP协议了,每个路由器都能识别出目标IP地址在哪个路由器上,这其中涉及到了很多算法,我们这里不做更多的解释,简单来说,路由器能根据目标IP地址找到下一跳路由器的MAC地址,然后一步一步跳下去,直到找到目标IP地址的网络地址的路由器,然后通过该路由器来找到目标IP地址的MAC地址,这样就能够找到目标主机了。这就是ARP协议。

4. IP协议

IP协议通过看一下IP数据包(报)的格式就知道IP协议是干嘛的了,就是来规定数据报的格式,以及定义的功能。

5. ICMP协议

这个比较简单,就两部分ICMP差错报告报文ICMP询问报文。这个挺使用的,比如我们经常用来测试网络连接畅通的ping命令等。

ICMP差错报告报文:检测在传送数据的过程中,发生的错误,如果发生了错误,会通过该协议返回给源主机一个带有错误原因的数据包。

ICMP询问报文:

1)回送请求和回答: 主机向特定目标发出询问,收到此报文必须返回一个ICMP回送回答报文。用于测试目的站是否可达。

2)时间戳请求和回答: 请某个路由器或主机回答当前的日期和时间,用于进行时钟的同步和测量时间。

6. IGMP协议

主要用于多播。

广播: 老师在台上讲课,你们能随时看到老师的电脑屏幕,因为采用的广播,每个人都能接受到老师屏幕上所有的数据包。

多播: 在一个局域网中,有三个多播组,A、B、C,A在放java视频,B在放C++视频,C在放娱乐视频,如果你想看Java视频,那么你就调到A这个多播组中学习java视频,学习累了,你就可以换到C这个多播组中看看娱乐节目,这就是多播的意思,相对广播来说,自己需要什么就调什么,而不是跟广播一样,被动接受,他播到哪,就只能看到哪,多播能自由控制速度。

单播: 50个人想看视频,就得发送50个数据包。多播的话就发一个,然后通过路由器转发50分给不同的人,


4. 传输层

参考博客:传输层

运输层提供应用层提供端到端通信服务,网络层通过IP地址和MAC地址找到了主机,要实现两主机进程间的通讯,需要找到对应主机的端口号,一个端口号对应一个进程。

1. UDP协议

UDP: User Datagram Protocol 用户数据报协议。

特点:

1. 无连接: 在通讯之前不需要建立连接,直接传输数据。

2. 不可靠: 是将数据报的分组从一台主机发送到另一台主机,但并不保证数据报能够到达另一端,任何必须的可靠性都由应用程序提供。在UDP情况下,虽然可以确保发送消息的大小,却不能保证消息一定会达到目的端。没有超时和重传功能,当UDP数据封装到IP数据报传输时,如果丢失,会发送一个ICMP差错报文给源主机。即使出现网络阻塞情况,UDP也无法进行流量控制。此外,传输途中即使出现丢包,UDP也不负责重发,甚至当出现包的到达顺序杂乱也没有纠正的功能。

应用场景:

1)应用层协议中DNS,也就是根据域名解析ip地址的一个协议,他使用的就是UDP;

2)DHCP,这个是给各电脑分配IP地址的协议,其中用的也是UDP协议;

3)IGMP,我们说的多播,也就是使用的UDP,在多媒体教师,老师拿笔记本讲课,我们在下面通过各自的电脑看到老师的画面,这就是通过UDP传输数据,所以会出现有的同学卡,有的同学很流畅,就是因为其不可靠传输,但是卡一下,对接下来的观看并没有什么映像。

2. TCP协议

TCP: Transmission Control Protocol传输控制协议。

TCP协议是面向连接的可靠传输有流量控制拥塞控制面向字节流传输等很多优点的协议。其最终功能和UDP一样,在端和端之间进行通信,但是和UDP的区别还是很大的。

应用场景:

1)FTP:定义了文件传输协议,使用21端口。常说某某计算机开了FTP服务便是启动了文件传输服务。下载文件,上传主页,都要用到FTP服务。

2)Telnet:它是一种用于远程登陆的端口,用户可以以自己的身份远程连接到计算机上,通过这种端口可以提供一种基于DOS模式下的通信服务。如以前的BBS是-纯字符界面的,支持BBS的服务器将23端口打开,对外提供服务。

3)SMTP:定义了简单邮件传送协议,现在很多邮件服务器都用的是这个协议,用于发送邮件。如常见的免费邮件服务中用的就是这个邮件服务端口,所以在电子邮件设置-中常看到有这么SMTP端口设置这个栏,服务器开放的是25号端口。

4)POP3:Post Office Protocol 3的简称,即邮局协议的第3个版本,它是和SMTP对应,POP3用于接收邮件。通常情况下,POP3协议所用的是110端口。也是说,只要你有相应的使用POP3协议的程序(例如Fo-xmail或Outlook),就可以不以Web方式登陆进邮箱界面,直接用邮件程序就可以收到邮件(如是163邮箱就没有必要先进入网易网站,再进入自己的邮-箱来收信)。

5) HTTP:这是大家用得最多的协议,它就是常说的”超文本传输协议”。上网浏览网页时,就得在提供网页资源的计算机上打开80号端口以提供服务。常说”WWW服务”、”Web服务器”用的就是这个端口。

TCP三次握手建立连接

参考博客:(TCP三次握手)

有趣的例子:

A:“喂,你听得到吗?”A->SYN_SEND

B:“我听得到呀,你听得到我吗?”应答与请求同时发出 B->SYN_RCVD | A->ESTABLISHED

A:“我能听到你,今天balabala……”B->ESTABLISHED

相关符号:

1. ACK: 确认,当ACK为1时,确认序号才有效。当ACK为0时,确认序号没用;
2. SYN: 同步序号,用来发起一个连接;
3. FIN: 终止标志,在释放连接时使用;(和SYN一样,一个FIN将占用一个序号)
4. seq: 序号;
5. ack: 确认序号;
6. ISN: 初始序号(Initial Sequence Number),是随机产生的;

注意: 建立连接的最重要目是让连接的双方交换初始序号ISN(Initial Sequence Number)。

image

图片中x和y分别是客户端和服务器的ISN。

三次握手过程:

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

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

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

TCP的三次握手过程?为什么会采用三次握手,若采用二次握手可以吗?

答:建立连接的过程是利用客户服务器模式,假设主机A为客户端,主机B为服务器端。

1)TCP的三次握手过程:主机A向B发送连接请求;主机B对收到的主机A的报文段进行确认;主机A再次对主机B的确认进行确认。

2)采用三次握手是为了防止失效的连接请求报文段突然又传送到主机B,因而产生错误。失效的连接请求报文段是指:主机A发出的连接请求没有收到主机B的确认,于是经过一段时间后,主机A又重新向主机B发送连接请求,且建立成功,顺序完成数据传输。考虑这样一种特殊情况,主机A第一次发送的连接请求并没有丢失,而是因为网络节点导致延迟达到主机B,主机B以为是主机A又发起的新连接,于是主机B同意连接,并向主机A发回确认,但是此时主机A根本不会理会,主机B就一直在等待主机A发送数据,导致主机B的资源浪费。

3)采用两次握手不行,原因就是上面说的实效的连接请求的特殊情况。

TCP四次挥手断开连接

有趣的例子:

A:“喂,我不说了。”A->FIN_WAIT1

B:“我知道了。等下,上一句还没说完。Balabala…..”B->CLOSE_WAIT | A->FIN_WAIT2

B:”好了,说完了,我也不说了。”B->LAST_ACK

A:”我知道了。”A->TIME_WAIT | B->CLOSED

A等待2MSL,保证B收到了消息,否则重说一次”我知道了”,A->CLOSED

image

TCP四次挥手断开连接过程

假设主机A为客户端,主机B为服务器,其释放TCP连接的过程如下:

1)关闭客户端到服务器的连接:首先客户端A发送一个FIN,用来关闭客户到服务器的数据传送,然后等待服务器的确认。其中终止标志位FIN=1,序列号seq=u

2)服务器收到这个FIN,它发回一个ACK,确认号ack为收到的序号加1。

3)关闭服务器到客户端的连接:也是发送一个FIN给客户端。

4)客户段收到FIN后,并发回一个ACK报文确认,并将确认序号seq设置为收到序号加1。

首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。

为什么TCP释放连接需要四次?

TCP建立连接要进行三次握手,而断开连接要进行四次。这是由于TCP的半关闭造成的。因为TCP连接是全双工的(即数据可在两个方向上同时传递)所以进行关闭时每个方向上都要单独进行关闭。这个单方向的关闭就叫半关闭。当一方完成它的数据发送任务,就发送一个FIN来向另一方通告将要终止这个方向的连接。

A为什么等待2MSL,从TIME_WAIT到CLOSE?

在Client发送出最后的ACK回复,但该ACK可能丢失。Server如果没有收到ACK,将不断重复发送FIN片段。所以Client不能立即关闭,它必须确认Server接收到了该ACK。Client会在发送出ACK之后进入到TIME_WAIT状态。Client会设置一个计时器,等待2MSL的时间。如果在该时间内再次收到FIN,那么Client会重发ACK并再次等待2MSL。所谓的2MSL是两倍的MSL(Maximum Segment Lifetime)。MSL指一个片段在网络中最大的存活时间,2MSL就是一个发送和一个回复所需的最大时间。如果直到2MSL,Client都没有再次收到FIN,那么Client推断ACK已经被成功接收,则结束TCP连接。

5. 应用层

参考博客:DNS协议

参考博客:HTTP协议

参考博客:HTTP断线续传原理

6. 访问一个网站的基本流程

参考:访问一个网站的基本流程

原创粉丝点击