计算机网络相关

1.从输入URL到页面加载发生了什么?

总体来说分为以下几个过程:
1.DNS解析
2.TCP连接
3.发送HTTP请求
4.服务器处理请求并返回HTTP报文
5.浏览器解析渲染页面
6.连接结束

1.DNS解析

DNS解析的过程就是寻找哪台机器上有你需要资源的过程。当你在浏览器中输入一个地址时,例如www.baidu.com ,其实不是百度网站真正意义上的地址。互联网上每一台计算机的唯一标识是它的IP地址,但是IP地址并不方便记忆。用户更喜欢用方便记忆的网址去寻找互联网上的其它计算机,也就是上面提到的百度的网址。所以互联网设计者需要在用户的方便性与可用性方面做一个权衡,这个权衡就是一个网址到IP地址的转换,这个过程就是DNS解析。它实际上充当了一个翻译的角色,实现了网址到IP地址的转换。网址到IP地址转换的过程是如何进行的?
DNS缓存
DNS存在着多级缓存,从离浏览器的距离排序的话,有以下几种: 浏览器缓存,系统缓存,路由器缓存,IPS服务器缓存,根域名服务器缓存,顶级域名服务器缓存,主域名服务器缓存。
DNS负载均衡
不知道大家有没有思考过一个问题: DNS返回的IP地址是否每次都一样?如果每次都一样是否说明你请求的资源都位于同一台机器上面,那么这台机器需要多高的性能和储存才能满足亿万请求呢?其实真实的互联网世界背后存在成千上百台服务器,大型的网站甚至更多。但是在用户的眼中,它需要的只是处理他的请求,哪台机器处理请求并不重要。DNS可以返回一个合适的机器的IP给用户,例如可以根据每台机器的负载量,该机器离用户地理位置的距离等等,这种过程就是DNS负载均衡,又叫做DNS重定向。大家耳熟能详的CDN(Content Delivery Network)就是利用DNS的重定向技术,DNS服务器会返回一个跟用户最接近的点的IP地址给用户,CDN节点的服务器负责响应用户的请求,提供所需的内容。

2.TCP连接

HTTP协议是使用TCP作为其传输层协议的,当TCP出现瓶颈时,HTTP也会受到影响

可以看我写的另一篇TCP
网络层(IP协议)——>链路层(ARP协议)–>物理层()

3.HTTPS协议

HTTP报文是包裹在TCP报文中发送的,服务器端收到TCP报文时会解包提取出HTTP报文。但是这个过程中存在一定的风险,HTTP报文是明文,如果中间被截取的话会存在一些信息泄露的风险。那么在进入TCP报文之前对HTTP做一次加密就可以解决这个问题了。HTTPS协议的本质就是HTTP + SSL(or TLS)。在HTTP报文进入TCP报文之前,先使用SSL对HTTP报文进行加密。从网络的层级结构看它位于HTTP协议与TCP协议之间。HTTPS在传输数据之前需要客户端与服务器进行一个握手(TLS/SSL握手),在握手过程中将确立双方加密传输数据的密码信息。TLS/SSL使用了非对称加密,对称加密以及hash等。HTTPS相比于HTTP,虽然提供了安全保证,但是势必会带来一些时间上的损耗,如握手和加密等过程,是否使用HTTPS需要根据具体情况在安全和性能方面做出权衡。
HTTP请求
这部分又可以称为前端工程师眼中的HTTP,客户端发送HTTP请求的过程就是构建HTTP请求报文并通过TCP协议中发送到服务器指定端口(HTTP协议80/8080, HTTPS协议443)。HTTP请求报文是由三部分组成: 请求行, 请求报头和请求正文。

4.服务器处理请求并返回HTTP报文

这部分对应的就是后端工程师眼中的HTTP。后端从在固定的端口接收到TCP报文开始,这一部分对应于编程语言中的socket。它会对TCP连接进行处理,对HTTP协议进行解析,并按照报文格式进一步封装成HTTP Request对象,供上层使用。这一部分工作一般是由Web服务器去进行,我们常用的Web服务器有Tomcat, Jetty和Netty等等。
HTTP响应报文也是由三部分组成: 状态码, 响应报头和响应报文。
状态码是由3位数组成,第一个数字定义了响应的类别,且有五种可能取值:
1xx:指示信息–表示请求已接收,继续处理。
2xx:成功–表示请求已被成功接收、理解、接受。
3xx:重定向–要完成请求必须进行更进一步的操作。
4xx:客户端错误–请求有语法错误或请求无法实现。
5xx:服务器端错误–服务器未能实现合法的请求。
平时遇到比较常见的状态码有:200, 204, 301, 302, 304, 400, 401, 403, 404, 422, 500

5.浏览器解析渲染页面

浏览器是一个边解析边渲染的过程,浏览器在解析过程中,如果遇到请求外部资源时,如图像,iconfont,JS等。浏览器将重复上述1-5过程下载该资源。请求过程是异步的,并不会影响HTML文档进行加载,但是当文档加载过程中遇到JS文件,HTML文档会挂起渲染过程,不仅要等到文档中JS文件加载完毕还要等待解析执行完毕,才会继续HTML的渲染过程。原因是因为JS有可能修改DOM结构,这就意味着JS执行完成前,后续所有资源的下载是没有必要的,这就是JS阻塞后续资源下载的根本原因。CSS文件的加载不影响JS文件的加载,但是却影响JS文件的执行。JS代码执行前浏览器必须保证CSS文件已经下载并加载完毕

6。断开连接

TCP四次挥手
可以看我写的另一篇

路由算法分两种动态路由算法和静态路由算法

一 动态路由算法

主要有RIP GRP

1.距离矢量路由算法

基本思想原理:
网络中每一个路由器都要维护一张矢量表 ,这个矢量表中的每一行都记录了从当前位置能到达的目标路由器的最佳出口(接口)和距离(跳数)。

每隔一段时间当前路由器会向所有的邻居节点发送自己的这个表,同时它也会接收每个邻居发来的它们的表。并会将邻居的表和自己的表做一个对比更新。

优点:1.简单清晰 2.加入网络的新节点能迅速与其他节点建立联系获得补充信息。

缺点:
1.每次发送信息要发送整个全局路由表 太大了
2.每个路由器需要在矢量表中记录下整个网络的信息,导致需要较大存储、CPU、网络开销,对资源的要求越来越高。
3.收敛速度太慢(所有路由器掌握的网络情况达到一致需要时间久) 容易导致路由器表更新慢,造成路由环路问题。

2.链路状态路由算法

主要有 OSPF IS-IS
基本步骤和原理:
1.发现邻节点,并获取他们的地址。
2.测量到达每一个邻节点的时延(距离)或成本。
3.构建一个包含自己所拥有信息的链路状态包。
4.将这个包广播到网络中,并接收其它路由器的链路状态包。
5.计算出当前节点到其它所有节点之间的最短路径(基于Dijkstra算法)

链路状态算法只会广播广播更新的或者改变的网络,传播的信息量少很多,节省了带宽和CPU资源。
扩展力好,收敛速度更快,快速适应网络变化

二 静态路由算法

静态路由(Static Route)是一种特殊的路由,它不是某一路由算法计算得出的,而是由管理员手工设定的。

手工配置网络上的所有路由虽然可以使网络正常运转,但是也会带来一些局限性。网络拓扑发生变化之后,静态路由不会自动改变,必须有网络管理员的介入。当网络拓扑复杂、变化频繁的时候,管理员的工作量就非常可观了,所以,静态路由一般用在小规模的网络上,或只是作为网络的局部设置。合理地设置静态路由会节约带宽,增加网络的可用性。

静态路由的使用场合
网络的末端是使用静态路由的理想环境。如果公司的局域网只通过一条广域网专线和ISP的网络连接,那么公司网络就是一个末端网络,通常叫做Stup Network。ISP的路由器可以使用静态方法指出公司网络的路由:所有发往公司局域网的信息都被送到公司的路由器上。这样的路由配置简单易行,而且节约了路由算法产生的信息在网络上传送所需要的带宽。

Mac地址全网唯一,每台电脑出厂网卡设置好的不能改变,作用类似于身份证号。
Mac地址只能实现局域网内的通信 是通过广播来寻址的。跨网通信就一定要使用IP地址来通信
IP地址相当于一个可以住的地方,谁都可以住。

IP地址的分类

A,B,C类比较常用 D类地址用来组播 E类地址用于科研实验
IP地址和子网掩码进行与运算可以得到网络地址(局域网的网络号)

A类

默认子网掩码是255.0.0.0
1.0.0.0 ~ 126.255.255.255 共有126个可用网络 每个网络可以容纳2^24-2个主机
10.0.0.0 ~ 10.255.255.255 内部留用的私有地址,互联网未使用
0.0.0.0和127.0.0.0 保留
127.0.0.0 ~ 127.255.255.255 测试TCP/IP的回环地址,不会传到网上
A类地址的后24位为主机号,前8位为网络号,主机号全为0表示网络地址,主机号全为1表示广播地址
网络号不同的两个IP之间不能直接通信,只能通过默认网关去和其他网络的主机通信。

B类

默认子网掩码 255.255.0.0
128.0.0.0 ~ 191.255.255.255 一个B类地址可以容纳2^16-2个主机
172.16.0.0 ~ 172.31.255.255 内部保留
128.0.0.0 和 191.255.0.0 保留

C类

192.0.0.0 ~ 223.255.255.255 每个IP可以有254个主机
192.168.0.0 ~ 192.168.255.255 留用的内部私有地址
192.0.0.0 和 223.255.255.0 保留

D类
224.0.0.0~239.255.255.255 用于多点广播也就是组播地址

E类 仅用于某些特殊实验或未来使用
240.0.0.0~255.255.255.254 保留
255.255.255.255 广播

127地址是回环地址 意思相当于自己给自己发消息

每个网络的第一个地址为本地网络号 是默认网关对外交流的接口
最后一个地址为广播地址 用于本网内实现通信 不能用做主机地址

192.168.8.0/21 这个/21表示子网掩码是21位(前21位都是1)

1.ARP是地址解析协议,简单解释一下工作原理

ARP是解决统一局域网上的主机路由器的IP地址和硬件地址的映射问题。
每一个主机都设有一个ARP高速缓存,里面有本局网上的各主机和路由器的IP地址到硬件地址的映射表。
当主机A要向本局域网上的某个主机B的IP地址发送IP数据报时,就先在其ARP高速缓存中查看有无主机B
的IP地址,如果有,就在ARP高速缓存器中查找出其对应的硬件地址,再把这个硬件地址写入mac帧中,
然后通过局域网把mac帧发往此硬件地址,否则主机A就自动运行ARP,
然后按以下步骤找出主机B的硬件地址:
(1)ARP进程在本局网上广播发发送一个ARP请求分组。
(2)在本局域网上的所有主机上运行的ARP进程都收到此ARP请求分组。
(3)主机B的IP地址与ARP请求分组中要查询的IP地址一致就收下这个ARP请求分组,
并向主机A发送ARP响应分组,并在这个ARP响应分组中写如自己的硬件地址。
(4)主机A收到主机B的ARP响应分组后,就在其ARP高速缓存中写入主机B的IP地址到硬件地址的映射

2.RARP原理

1.将源设备和目标设备的MAC地址字段都设为发送者的MAC地址和IP地址,发送主机发送一个本地的RARP广播,
能够到达网络上的所有设备,在此广播包中,声明自己的MAC地址并且请求任何收到此请求的RARP服务器分配一个IP地址;
2.本地网段上的RARP服务器收到此请求后,检查其RARP列表,查找该MAC地址对应的IP地址;
3.如果存在,RARP服务器就给源主机发送一个响应数据包并将此IP地址提供给对方主机使用;如果不存在,RARP服务器对此不做任何的响应;
4.源主机收到从RARP服务器的响应信息,就利用得到的IP地址进行通讯;如果一直没有收到RARP服务器的响应信息,表示初始化失败

3.IP地址分类

答:
A类地址:以0开头, 第一个字节范围:1~126(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开头,第一个字节范围:224~239(224.0.0.0 - 239.255.255.255);(作为多播使用)

E类地址:保留

其中A、B、C是基本类,D、E类作为多播和保留使用。

以下是留用的内部私有地址:

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

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

ip : 192.168.2.110

&

Submask : 255.255.255.0


网络号 :192.168.2 .0

注:

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

TCP和UDP的区别

答:TCP提供面向连接的、可靠的数据流传输,而UDP提供的是非面向连接的、不可靠的数据流传输。
TCP传输单位称为TCP报文段,UDP传输单位称为用户数据报。
TCP注重数据安全性,UDP数据传输快,因为不需要连接等待,少了许多操作,但是其安全性却一般。
TCP对应的协议和UDP对应的协议
TCP对应的协议:
(1) FTP:定义了文件传输协议,使用21端口。
(2) Telnet:一种用于远程登陆的端口,使用23端口,用户可以以自己的身份远程连接到计算机上,可提供基于DOS模式下的通信服务。
(3) SMTP:邮件传送协议,用于发送邮件。服务器开放的是25号端口。
(4) POP3:它是和SMTP对应,POP3用于接收邮件。POP3协议所用的是110端口。
(5)HTTP:是从Web服务器传输超文本到本地浏览器的传送协议。
UDP对应的协议:
(1) DNS:用于域名解析服务,将域名地址转换为IP地址。DNS用的是53号端口。
(2) SNMP:简单网络管理协议,使用161号端口,是用来管理网络设备的。由于网络设备很多,无连接的服务就体现出其优势。
(3) TFTP(Trivial File Transfer Protocal),简单文件传输协议,该协议在熟知端口69上使用UDP服务。

4.DNS域名系统,简单描述其工作原理

答:当DNS客户机需要在程序中使用名称时,它会查询DNS服务器来解析该名称。客

户机发送的每条查询信息包括三条信息:包括:指定的DNS域名,指定的查询类

型,DNS域名的指定类别。基于UDP服务,端口53. 该应用一般不直接为用户使

用,而是为其他应用服务,如HTTP,SMTP等在其中需要完成主机名到IP地址的转
换。

5.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)采用两次握手不行,原因就是上面说的失效的连接请求的特殊情况。

一.拥塞控制与流量控制的区别

拥塞控制:拥塞控制是作用于网络的,它是防止过多的数据注入到网络中,避免出现网络负载过大的情况;是一个全局的过程
涉及所有主机 路由器
常用的方法就是:( 1 )慢启动、拥塞避免( 2 )快速重传、快速恢复。

流量控制:流量控制是作用于接收者的,它是控制发送者的发送速度从而使接收者来得及接收,防止分组丢失的 点到点的通信量控制。

二什么是流量控制?流量控制的目的?

如果发送者发送数据过快,接收者来不及接收,那么就会有分组丢失。为了避免分组丢失,
控制发送者的发送速度,使得接收者来得及接收,这就是流量控制。
流量控制根本目的是防止分组丢失,消除接受缓存溢出它是构成TCP可靠性的一方面。

如何实现流量控制?

由滑动窗口协议(连续ARQ协议)实现。滑动窗口协议既保证了分组无差错、有序接收,也实现了流量控制。
主要的方式就是接收方返回的 ACK 中会包含自己的接收窗口的大小,并且利用大小来控制发送方的数据发送。

流量控制引发的死锁?怎么避免死锁的发生?

当发送者收到了一个窗口为0的应答,发送者便停止发送,等待接收者的下一个应答。但是如果这个窗口不为0的应答在传输过程丢失,
发送者一直等待下去,而接收者以为发送者已经收到该应答,等待接收新数据,这样双方就相互等待,从而产生死锁。
为了避免流量控制引发的死锁,TCP使用了持续计时器。每当发送者收到一个零窗口的应答后就启动该计时器。
时间一到便主动发送报文询问接收者的窗口大小。若接收者仍然返回零窗口,则重置该计时器继续等待;
若窗口不为0,则表示应答报文丢失了,此时重置发送窗口后开始发送,这样就避免了死锁的产生。

拥塞控制机制是TCP提供可靠传输服务的关键部分

TCP连接的每一端都是由一个接收缓存,一个发送缓存和几个变量(用于实现流量控制等)组成

TCP采用的方法是让每一个发送方根据所感知到的网络拥塞程度来限制其能向连接发送流量的速率。
此方法引出三个问题:

1.如何限制向连接发送流量的速率?

运行在发送方的拥塞控制机制跟踪一个额外的变量即拥塞窗口(表示为cwnd)
它对一个TCP发送方能向网络中发送流量的速率进行了限制 表示未被确定的数据量小于等于cwnd与rwnd(接收方缓存剩余空间)中的最小值。

2.如何感知路径上存在拥塞?

出现拥塞时路径中的路由器会出现缓存溢出,发送方则会有丢包事件(要么超时或收到3个冗余ACK),发送方就认为路径中出现了拥塞的指示。

3.采用什么算法来改变发送速度?

既要网络不拥塞 又要充分利用可用的宽带 下面就让我们来详细了解TCP拥塞控制算法

1.慢启动

如果立即将大量的数据注入到网络可能会出现网络的拥塞。慢启动算法就是在刚开始发送数据报的时候先探测一下网络的状况,
如果网络状况良好,发送方每发送一次报文都能正确的接受确认报文段。那么就从小到大的增加拥塞窗口的大小
即增加发送窗口的大小。发送方先设置拥塞窗口cwnd=1, 发送第一个报文段M1,接收方接收到M1后,
发送方接收到接收方的确认后,把cwnd增加到2,接着发送方发送M2、M3,发送方接收到接收方发送的确认
后cwnd增加到4,慢启动算法每经过一个传输轮次(认为发送方都成功接收接收方的确认),拥塞窗口cwnd就加倍。

2.拥塞避免

为了防止拥塞窗口cwnd增加过快而导致网络拥塞,所以需要设置一个慢开始门限ssthresh状态变量:

               **1.  当cwnd < ssthresh,使用慢启动算法。   
               2.  当cwnd > ssthresh,使用拥塞避免算法,停用慢启动算法。   
               3.  当cwnd = ssthresh,这两个算法都可以。   **

拥塞避免是让cwnd缓慢的增加而不是加倍的增长,每经历过一次往返时间就使cwnd增加1,而不是加倍,
这样使cwnd缓慢的增长,比慢启动要慢的多。
值得注意的是: 无论是慢启动算法还是拥塞避免算法,只要判断网络出现拥塞,就要把慢启动开始
门限ssthresh为设置为发送窗口的一半,cwnd设置为1,然后在使用慢启动算法,这样做的目的
能迅速的减少主机向网络中传输数据,使发生拥塞的路由器能够把队列中堆积的分组处理完毕。拥塞窗口
是按照线性的规律增长,比慢启动算法拥塞窗口增长块的多。

3.快速重传

要求首先接收方收到一个失序的报文段后就立刻发出重复确认,而不要等待自己发送数据时才进行捎带确认。
接收方成功的接受了发送方发送来的M1、M2并且分别给发送了ACK,现在接收方没有收到M3,而接收到了M4,
显然接收方不能确认M4,因为M4是失序的报文段。如果根据可靠性传输原理接收方什么都不做,但是按照快
速重传算法,在收到M4、M5等报文段的时候,不断重复的向发送方发送M2的ACK,如果接收方一连收到三个
重复的ACK,那么发送方不必等待重传计时器到期,由于发送方尽早重传未被确认的报文段。

4.快速恢复:
  1. 当发送发连续接收到三个确认时,就执行乘法减小算法,把慢启动开始门限(ssthresh)减半,但是接下来并不执行慢开始算法。
  2. 此时不执行慢启动算法,而是把cwnd设置为ssthresh的一半, 然后执行拥塞避免算法,使拥塞窗口缓慢增大。
    快速重传和快速恢复并非是必须的,慢启动和拥塞避免则是强制部分

协议是网络数据交换的规则
协议规定通信实体间交换消息的格式,意义,顺序,以及对收到消息后的动作
协议三要素
1.语法
2.语义
3.时序
协议规范了网络中所有信息发送和接收过程
应用层协议

FTP:文件传输协议 常用工具有FileZilla

客户机与服务器之间传输文件
连接端口:21
数据传输使用端口:20
Client使用TCP与Server连接 连接后可以看到服务器端目录
服务器接收到文件命令时会打开第二个TCP连接也就是20端口来传输数据

电子邮件

三个部分组成

1.用户代理

也就是客户端 用来编辑,阅读邮件信息的地方 邮件信息都保存在服务器上

2.邮件服务器

邮箱保留用户邮件 邮件队列:等待发送的邮件

3.简单邮件传输协议:SMTP

服务器之间交换邮件的协议 发送邮件的服务器是Client 接受邮件的服务器是Server
使用TCP从客户端传输邮件信息到服务器 使用端口:25
是直接发送 发送服务器直接对接接收服务器
下载协议 POP3
IMAP

DNS:Domain Name System(域名系统)
是一个分布式数据库 具有层次结构的多个域名服务器
应用层协议
每一个主机有唯一Ip地址
DNS是主机名到IP地址的翻译

Computer-Network

计算机网络学习的核心内容就是网络协议的学习,计算机网络协议同我们生活中的语言一样,多种多样。

为了使不同计算机厂家生产的计算机能够相互通信,以便在更大的范围内建立计 算机网络,

国际标准化组织(ISO)在1978年提出了“开放系统互联参考模型”,即OSI七层模型,

除了标准的OSI七层模型以外,常见的网络层次划分还有TCP/IP四层协议 和 TCP/IP五层协议。

**电路交换:**通信之前要在通信双方之间建立一条被双方独占的物理通路(由通信双方之间的交换设备和链路逐段连接而成)。
优点:
由于通信线路为通信双方用户专用,数据直达,所以传输数据的时延非常小。
通信双方之间的物理通路一旦建立,双方可以随时通信,实时性强。
双方通信时按发送顺序传送数据,不存在失序问题。
电路交换既适用于传输模拟信号,也适用于传输数字信号。
电路交换设备控制均较简单。
缺点:
电路交换的平均连接建立时间对计算机通信来说偏长。
电路交换连接建立后,物理通路被通信双方独占,即使通信线路空闲,也不能供其他用户使用,因而信道利用低。
电路交换时,数据直达,不同类型、不同规格、不同速率的终端很难相互进行通信,也难以在通信过程中进行差错控制。

**分组交换:**分组交换采用存储转发传输方式,将一个长报文先分割为若干个较短的分组,然后把这些分组(携带源、目的地址和编号信息)逐个地发送出去,因此分组交换除了具有报文的优点外,与报文交换相比有以下优缺点:
优点:
加速了数据在网络中的传输。因为分组是逐个传输,可以使后一个分组的存储操作与前一个分组的转发操作并行,这种流水线式传输方式减少了报文的传输时间。
此外,传输一个分组所需的缓冲区比传输一份报文所需的缓冲区小得多,这样因缓冲区不足而等待发送的机率及等待的时间也必然少得多。
简化了存储管理。因为分组的长度固定,相应的缓冲区的大小也固定,在交换结点中存储器的管理通常被简化为对缓冲区的管理,相对比较容易。
减少了出错机率和重发数据量。因为分组较短,其出错机率必然减少,每次重发的数据量也就大大减少,这样不仅提高了可靠性,也减少了传输时延。
由于分组短小,更适用于采用优先级策略,便于及时传送一些紧急数据,因此对于计算机之间的突发式的数据通信,分组交换显然更为合适些。
缺点:
尽管分组交换比报文交换的传输时延少,但仍存在存储转发时延,而且其结点交换机必须具有更强的处理能力。
分组交换中的每个分组都要加上源、目的地址和分组编号等信息,这将增大传送的信息量,一定程度上降低了通信效率,增加了处理的时间,使控制复杂,时延增加。
当分组交换采用数据报服务时,可能出现失序、丢失或重复分组,分组到达目的结点时,要对分组按编号进行排序等工作,增加了麻烦。若采用虚电路服务,虽无失序问题,但有呼叫建立、数据传输和虚电路释放三个过程。

总之,若传输的数据量很大,而且传送时间远大于呼叫时间,则采用电路交换较为合适;当端到端的通路由很多段的链路组成时
采用分组交换较为合适。从提高整个网络的信道利用率上看,分组交换优于电路交换

OSI七层模型

TCP/IP协议是互联网的基础协议,每一层中都要自己的专属协议,完成自己相应的工作以及与上下层级之间进行沟通。
简要来讲各层作用:

物理层:通过媒介传输比特,确定机械及电气规范(比特Bit)

数据链路层:将比特组装成帧和点到点的传递(帧Frame)

网络层:负责数据包从源到宿的传递和网际互连(包PackeT)

传输层:提供端到端的可靠报文传递和错误恢复(段Segment)

会话层:建立、管理和终止会话(会话协议数据单元SPDU)

表示层:对数据进行翻译、加密和压缩(表示协议数据单元PPDU)

应用层:允许访问OSI环境的手段(应用协议数据单元APDU)

1.物理层(Physical Layer)

激活、维持、关闭通信端点之间的机械特性、电气特性、功能特性以及过程特性。

该层为上层协议提供了一个传输数据的可靠的物理媒体。简单的说,物理层确保

原始的数据可在各种物理媒体上传输。物理层记住两个重要的设备名称,

中继器(Repeater,也叫放大器)和集线器

2.数据链路层(Data Link Layer)

将源自网络层来的数据可靠地传输到相邻节点的目标机网络层。为达到这一目的,

数据链路必须具备一系列相应的功能,主要有:如何将数据组合成数据块,

在数据链路层中称这种数据块为帧(frame),帧是数据链路层的传送单位;

如何控制帧在物理信道上的传输,包括如何处理传输差错,如何调节发送速率以使与接收方相匹配;

以及在两个网络实体之间提供数据链路通路的建立、维持和释放的管理。

数据链路层在不可靠的物理介质上提供可靠的传输。

该层的作用包括:物理地址寻址、数据的成帧、流量控制、数据的检错、重发等。

有关数据链路层的重要知识点:

  1. 数据链路层为网络层提供可靠的数据传输;

2. 基本数据单位为帧;

3. 主要的协议:以太网协议;

4. 两个重要设备名称:网桥和交换机。

3.网络层(Network Layer)

网络层的目的是实现两个端系统之间的数据透明传送,具体功能包括寻址

和路由选择、连接的建立、保持和终止等。它提供的服务使传输层不需

要了解网络中的数据传输和交换技术。如果您想用尽量少的词来记住网络

层,那就是“路径选择、路由及逻辑寻址”。

网络层中涉及众多的协议,其中包括最重要的协议,也是TCP/IP的核心协议——IP协议。

IP协议非常简单,仅仅提供不可靠、无连接的传送服务。

IP协议的主要功能有:无连接数据报传输、数据报路由选择和差错控制。

与IP协议配套使用实现其功能的还有地址解析协议ARP、逆地址解析协议RARP、

因特网报文协议ICMP、因特网组管理协议IGMP。具体的协议我们会在接下来的部分进行总结。

有关网络层的重点为:

1. 网络层负责对子网间的数据包进行路由选择。此外,网络层还可以实现拥塞控制、网际互连等功能;

2. 基本数据单位为IP数据报;

3. 包含的主要协议:

IP协议(Internet Protocol,因特网互联协议);

ICMP协议(Internet Control Message Protocol,因特网控制报文协议);

ARP协议(Address Resolution Protocol,地址解析协议);

RARP协议(Reverse Address Resolution Protocol,逆地址解析协议)。

4. 重要的设备:路由器。

4.传输层(Transport Layer)

传输层的任务是根据通信子网的特性,最佳的利用网络资源,为两个端系

统的会话层之间,提供建立、维护和取消传输连接的功能,负责端到端的

可靠数据传输。在这一层,信息传送的协议数据单元称为段或报文。

  网络层只是根据网络地址将源结点发出的数据包传送到目的结点,而

传输层则负责将数据可靠地传送到相应的端口。

有关网络层的重点:

 1. 传输层负责将上层数据分段并提供端到端的、可靠的或不可靠的传

输以及端到端的差错控制和流量控制问题;

 2. 包含的主要协议:

TCP协议(Transmission ControlProtocol,传输控制协议)

UDP协议(User Datagram Protocol,用户数据报协议)

 3. 重要设备:网关。

5.会话层

会话层管理主机之间的会话进程,即负责建立、管理、终止进程之间的会话。

会话层还利用在数据中插入校验点来实现数据的同步。

6.表示层

表示层对上层数据或信息进行变换以保证一个主机应用层信息可以被另一个主机的应用程序理解。

表示层的数据转换包括数据的加密、压缩、格式转换等。

7.应用层

是最靠近用户的OSI层,为用户的应用程序提供网络服务的接口。将用户的操作通过应用程序转换成为服务,

并匹配一个相应的服务协议发送给传输层。

会话层、表示层和应用层重点:

  1. 数据传输基本单位为报文;
  2. 包含的主要协议:FTP(文件传送协议)、Telnet(远程登录协议)

    DNS(域名解析协议)、SMTP(邮件传送协议),POP3协议(邮局协议)

    HTTP协议(Hyper Text Transfer Protocol)。

ARP地址解析协议的原理

地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取MAC地址的一个TCP/IP协议。

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查询失败。
注意: ** 广播**(255.255.255.255)发送ARP请求,单播发送ARP响应

在浏览器中输入www.baidu.com 后执行的全部过程

1、客户端浏览器通过DNS解析到www.baidu.com 的IP地址220.181.27.48 ,通过这个IP地址找到客户端到服务器的路径。客户端浏览器发起一个HTTP会话到220.161.27.48 然后通过TCP进行封装数据包,输入到网络层。

2、在客户端的传输层(添加TCP头),把HTTP会话请求分成报文段,添加源和目的端口,
如服务器使用80端口监听客户端的请求,客户端由系统随机选择一个端口如5000,
与服务器进行交换,服务器把相应的请求返回给客户端的5000端口。然后使用IP层的IP地址查找目的端。

3、客户端的网络层(添加IP头)不用关系应用层或者传输层的东西,主要做的是通过查找路由表确定如何到达服务器,
期间可能经过多个路由器,这些都是由路由器来完成的工作,我不作过多的描述,无非就是通过查找路由表决定通过那个路径到达服务器。

4、客户端的链路层(添加MAC头),包通过链路层发送到路由器,通过邻居协议查找给定IP地址的MAC地址,
然后发送ARP请求查找目的地址,如果得到回应后就可以使用ARP的请求应答交换的IP数据包现在就可以传输了,
然后发送IP数据包到达服务器的地址。

TCP和UDP的区别

这是传输层的两个协议,先说一下传输层的两大功能:
1.多路复用:在发送端,多个应用进程公用一个传输层;
2.多路分解:在接收端,传输层会根据端口号将数据分给不同的应用进程。

传输层和网络层的区别:
网络层为不同的主机提供通信服务,传输层为不同应用进程提供通信服务。
网络层只对报文头部进行差错检测,而传输层对整个报文进行差错检测。

UDP(User Data Protocol)用户数据报协议 实例:邮寄
1.无连接(不按顺序,不保证质量)
2.不可靠(不能保证都送达)
3.面向报文(UDP数据传输单位是报文,不会对数据进行拆分和拼接操作,只是给上层传来的数据加个UDP头或者给下层来的数据去掉UDP头)
4.没有拥塞控制,始终以恒定速率发送数据
5.支持一对一、一对多、多对多、多对一
6.首部开销小,只有8字节

TCP(Transmission Control Protocol)传输控制协议 实例:打电话
1.面向连接(按顺序,保证传输质量,可恢复错误和流量控制)
2.可靠的
3.面向字节流
4.全双工通信,TCP两端既可以作为发送端也可以作为接收端
5.连接的两端只能是两个端点,即一对一,不能一对多
6.至少20个字节,比UDP大的多

什么是TCP连接?

TCP连接是一种抽象的概念,表示一条可以通信的链路。
每个TCP连接有且仅有两个端点,表示通信的双方,且双方在任意时刻都可以作为发送者和接受者。

什么是套接字?

一条TCP连接的两端就是两个套接字。
套接字 = IP地址:端口号
因此,TCP连接 = (套接字1,套接字2)= (IP1:端口号1,IP2:端口号2)

TCP对应的协议和UDP对应的协议

TCP对应的协议:

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

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

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

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

(5)HTTP:是从Web服务器传输超文本到本地浏览器的传送协议。是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。

UDP对应的协议:

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

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

(3) TFTP:简单文件传输协议,该协议在端口69上使用UDP服务。

无论什么岗位都会问到get和post请求的区别 现在就让我们来彻底搞定它

get和post请求是HTTP协议请求的一部分

GET:请求读取由URL所标志的信息。

POST:给服务器添加信息(如注释)。

PUT:在给定的URL下存储一个文档。

DELETE:删除给定的URL所标志的资源。

http.jpg
根据上图可知 HTTP 中, POST 与 GET 的区别
GET 用于获取信息,无副作用,幂等,可缓存
POST 用于修改服务器上的数据,有副作用,非幂等,不可缓存

1.Get是从服务器上获取数据,Post是向服务器传送数据。

2.Get是把参数数据队列加到提交表单的Action属性所指向的URL中,值和表单内各个字段一一对应,在URL中可以看到。

3.Get传送的数据量小,不能大于2KB;Post传送的数据量较大,一般被默认为不受限制。

4.根据HTTP规范,GET用于信息获取,而且应该是安全的和幂等的。

I. 所谓 安全的 意味着该操作用于获取信息而非修改信息。换句话说,GET请求一般不应产生副作用。
就是说,它仅仅是获取资源信息,就像数据库查询一样,不会修改,增加数据,不会影响资源的状态。

II. 幂等 的意味着对同一URL的多个请求应该返回同样的结果
在报文上get post方法没有本质区别,仅报文格式不同 使用的都是同一个传输层TCP协议,所以在传输上没有区别。
报文格式上,不带参数时,最大区别仅仅是第一行方法名不同,一个是GET,一个是POST
带参数时报文的区别呢?在约定中,GET 方法的参数应该放在 url 中,POST 方法参数应该放在 body 中

几个常见疑惑

一、GET 方法参数写法是固定的吗?

在约定中,一般我们的参数是写在 ? 后面,用 & 分割。

我们知道,解析报文的过程是通过获取 TCP 数据,用正则等工具从数据中获取 Header 和 Body,从而提取参数。

也就是说,我们可以自己约定参数的写法,只要服务端能够解释出来就行,一种比较流行的写法是这样 :
http://www.example.com/user/name/yourname/age/22

二、POST 方法比 GET 方法安全?

按照网上大部分文章的解释,POST 比 GET 安全,因为数据在地址栏上不可见。
然而从传输的角度来说,他们都是不安全的,因为 HTTP 在网络上是明文传输,只要在网络节点上抓包,就能完整地获取数据报文。

要想安全传输,就只有加密,也就是 HTTPS。

三、听说 GET 方法参数长度有限制?

在网上看到很多关于两者区别的文章都有这一条,提到浏览器地址栏输入的参数是有限的。

首先说明一点,其实HTTP 协议本身倒并没有 Body 和 URL 的长度限制,对 URL 限制的大多是浏览器和服务器端自己限制的。

浏览器原因就不说了,服务器是因为处理长 URL 要消耗比较多的资源,为了性能和安全(防止恶意构造长 URL 来攻击)考虑,会给 URL 长度加限制。

四、POST 方法会产生两个TCP数据包?

有些文章中提到,POST 请求会将 Header 和 Body 分开发送,先发送 Header,服务端返回 100 状态码再发送 Body。
HTTP 协议中也并没有明确说明 POST 会产生两个 TCP 数据包,而且实际测试(Chrome)发现,Header 和 Body 不会分开发送。
所以,Header 和 Body 分开发送是部分浏览器或框架的请求方法,不属于 Post的必然行为。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值