计算机网络之读小林coding有感

448 阅读8分钟

TCP/IP网络模型

对于同一台设备上的通信,有多种方式,比如有管道、消息队列、共享内存、信号等方式。
对于不同设备上的进程间通信:网络通信,设备多种多样,要兼容多种多样的设备,因此协商出一套通用的网咯协议。

网络协议是分层的:

1.应用层:电脑和手机使用的应用软件都在应用层,应用层只专注于为用户提供应用功能,不用去关心数据是如何传输的。

应用层工作在操作系统的用户态,传输层及以下则工作在内核态。

2.传输层:为应用层提供网络支持,传输层两个协议:TCP and UDP.

TCP:传输层控制协议,TCP比UDP多了很多特性,比如超时重传、流量控制、拥塞控制等,为了保证数据包可靠的传输给对方。

UDP:相对简单,只负责发送数据包,不保证数据包是否能抵达对方,但实时性好,传输效率高。

应用层数据如果过大,将分段传输,分成TCP段,传输数据过程中传输层负责把数据包传给应用,但是一台设备上可能会有很多应用在接收或者传输数据,因此需要一个编号将应用区分开来,这个编号就是端口。

根据传输层的报文中的端口号,识别出报文发给哪个应用。

3.网络层:真正负责传递数据,传输层作为应用间数据传输的媒介,帮助实现应用到应用的通信,并不负责数据传输。

IP协议:

将IP地址分成两部分:1.网络号:标识该IP地址属于哪个子网;2.主机号:标识同一子网下的不同主机。

需要配合子网掩码才能算出ip地址的网络号和主机号。

除了寻址,IP协议还有另一个重要的功能就是路由。

IP协议的寻址作用是告诉我们去往下一个目的地该朝哪个方向走,路由则是根据下一个目的地选择路径。寻址更像是导航,路由更像是方向盘。

4.数据链路层:标识网络中的设备,为网络层提供链路级别传输的服务,当路由器通过路由表计算出下一个要去的ip地址,此时需要通过数据链路层知道这个ip地址是那个设备。

每一台设备上的网卡都会有一个MAC地址,用来唯一标识设备,路由器计算出了下一个目的地IP地址,再通过ARP协议找到该目的地的MAC地址,这样就知道这个IP地址是哪个设备的了。

5.物理层:当数据准备从设备发送到网络时,需要把数据包转成电信号,让其在物理介质中传输。

功能:为数据链路层提供二进制传输服务。

HTTP篇

HTTP常见面试题:

一、HTTP是什么?能否详细解释超文本传输协议?

答:HTTP是超文本传输协议,分成三部分:超文本、传输、协议来解释。

1.协议:是用在计算机世界里的协议,使用计算机能够理解的语言确立的计算机之间交流通信的规范(连个以上的参与者),以及相关的各种控制和错误处理方式(行为约定和规范)。

2.传输:HTTP是双向协议,HTTP是以一个在计算机世界里专门用来在两点之间传输数据的约定和规范。

3.超文本:超越了普通文本的文本,是文字、图片、视频等的混合体,最关键有超链接,能从一个超文本跳转到另外一个超文本。HTML就是最常见的超文本。

总结:http是一个在计算机世界里专门在两点之间传输文字、图片、音频、视频等超文本数据的约定和规范。

二、HTTP常见状态码有哪些?

1647517924(1).png 五大类,1xx表示提示信息,中间状态,用到很少。

2xx表示服务器成功处理客户端的请求。

其中200是最常见的成功状态码,表示一切正常。

204与200基本相同,常见的成功状态码,但是响应头没有body数据.

206是应用于HTTP分块下载和断点续传,表示响应返回的body数据不是资源的全部,是其中一部分,也是服务器处理成功的状态。

3xx表示重定向,资源位置发生变动,需要客户端用新的URL重新发送请求获取资源。

301永久重定向,说明请求的资源已经不存在了,需改用新的URL再次访问。

302临时重定向,说明请求的资源还在,但是暂时需要用另一个URL来访问。

301 和 302 都会在响应头⾥使⽤字段 Location ,指明后续要跳转的 URL,浏览器会⾃动重定向新的 URL。

304不具有跳转的含义,表示资源未修改,重定向已存在的缓冲⽂件,也称缓存重定向,⽤于缓 存控制。

4xx 类状态码表示客户端发送的报⽂有误,服务器⽆法处理,也就是错误码的含义。

「400 Bad Request」表示客户端请求的报⽂有错误,但只是个笼统的错误。

「403 Forbidden」表示服务器禁⽌访问资源,并不是客户端的请求出错。

「404 Not Found」表示请求的资源在服务器上不存在或未找到,所以⽆法提供给客户端。

5xx 类状态码表示客户端请求报⽂正确,但是服务器处理时内部发⽣了错误,属于服务器端的错误码。

「500 Internal Server Error」与 400 类型,是个笼统通⽤的错误码,服务器发⽣了什么错误,我们并不知道。

「501 Not Implemented」表示客户端请求的功能还不⽀持,类似“即将开业,敬请期待”的意思。

「502 Bad Gateway」通常是服务器作为⽹关或代理时返回的错误码,表示服务器⾃身⼯作正常,访问后端服务器 发⽣了错误。

「503 Service Unavailable」表示服务器当前很忙,暂时⽆法响应服务器,类似“⽹络服务正忙,请稍后重试”的意思。

HTTP常见字段有哪些?

客户端的字段:

Host字段:客户端发送请求时,⽤来指定服务器的域名。 有了 Host 字段,就可以将请求发往「同⼀台」服务器上的不同⽹站。

Connection 字段:最常⽤于客户端要求服务器使⽤ TCP 持久连接,以便其他请求复⽤。 HTTP/1.1 版本的默认连接都是持久连接,但为了兼容⽼版本的 HTTP,需要指定 Connection ⾸部字段的值为Keep-Alive 。

服务器字段

Content-Length 字段:服务器在返回数据时,会有 Content-Length 字段,表明本次回应的数据⻓度。

Content-Type 字段⽤于服务器回应时,告诉客户端,本次数据是什么格式。

客户端请求的时候,可以使⽤ Accept 字段声明⾃⼰可以接受哪些数据格式。

Accept: /

上⾯代码中,客户端声明⾃⼰可以接受任何格式的数据。

Content-Encoding 字段说明数据的压缩⽅法。表示服务器返回的数据使⽤了什么压缩格式。

客户端在请求时,⽤ Accept-Encoding 字段说明⾃⼰可以接受哪些压缩⽅法。

三、说⼀下 GET 和 POST 的区别?

Get ⽅法的含义是请求从服务器获取资源,这个资源可以是静态的⽂本、⻚⾯、图⽚视频等。

⽽ POST ⽅法则是相反操作,它向 URI 指定的资源提交数据,数据就放在报⽂的 body ⾥。 拼接好 POST 请求头,通过 TCP 协议发送给服务器。

GET 和 POST ⽅法都是安全和幂等的吗?

先说明下安全和幂等的概念:

1.在 HTTP 协议⾥,所谓的「安全」是指请求⽅法不会「破坏」服务器上的资源。

2.所谓的「幂等」,意思是多次执⾏相同的操作,结果都是「相同」的。

那么很明显 GET ⽅法就是安全且幂等的,因为它是「只读」操作,⽆论操作多少次,服务器上的数据都是安全的,且每次的结果都是相同的。

POST 因为是「新增或提交数据」的操作,会修改服务器上的资源,所以是不安全的,且多次提交数据就会创建多个资源,所以不是幂等的。

你知道的 HTTP(1.1) 的优点有哪些,怎么体现的?

HTTP 最凸出的优点是「简单、灵活和易于扩展、应⽤⼴泛和跨平台」。