网络基础

2017-11-06  本文已影响0人  金抽抽o

OSI七层模型

+ 物理层 
+ 数据链路层 
+ 网络层
+ 传输层
+ 会话层
+ 应用层

物理层

将0和1的比特流转换成物理介质。如果没有物理层,由 0 和 1 构成的比特流就无法在物理介质中传播。


数据链路层

它定义了通过通信介质相互连接的设备之前数据传输的规范.数据链路成的意义在意,如果没有数据链路层,数据只能以流的形式存在于通信介质中,不知道数据该发送到哪里。里面有2个重要的概念:

MAC地址

被烧录在网卡ROM中的一串数字,长度为48比特,他在世界范围内是唯一的。一旦指定了MAC地址,就确定了向哪个设备传输数据。

分组交换

分组交互就是将较大的数据分割成若干个较小的数据,然后依次发送。因为不同的数据链路有各自最大的传输单元(MTU),所以需要分割.以太网为例,它的MTU为100个字节,也就是通过以太网传输的数据必须分割为若干个帧,每个帧的大小不超过1500字节.


网络层

网络层的主要作用是实现终端节点间的通信。数据链路层的作用是实现在同一个数据链路下的传递,而网络层则可以实现跨越不同数据链路的包传递.比如主机A通过Wi-Fi连接到路由器B,路由器B通过以太网连接到路由器C,而路由器C又通过Wi-Fi与主机D保持连接。这时主机A向D发送的数据包就依赖于网络层进行传输。

IP协议

IP协议可以分为三大作用模块:IP寻址,路由和IP分包.

IP地址

IP地址是一个在网络层用于识别通信端信息的地址.

DNS解析

IP地址用于识别双方的地址,但他是一长串数字,不好记忆,于是诞生了域名。DNS协议的作用就是将域名转换成IP。

ARP协议

ARP协议用于通过目标IP地址定位到下个接受数据的网络设备的MAC地址ARP 协议的工作原理可以分为两部分:ARP 请求和 ARP 响应。 首先,源主机会通过广播发送一个 ARP 请求包:“我要与 IP 地址为 xxx 的主机通话,谁知道它的 MAC地址?”。

数据链路上的所有主机都会收到这条消息并检查自己的 IP 地址,如果与 ARP 请求包中的 IP 地址一致,主机就会发送 ARP 响应包:“我就是 IP 地址为 xxx 的主机,我的 MAC 地址是:xxxx”。

传输层

传输层的主要作用是实现应用程序间的通信。网络层主要保证了不同数据链路下的数据可达性,至于如果传输数据由传输层负责。常见的传输层协议有TCP协议和UDP协议。TCP协议是面向有链接的协议.也就是说使用TCP协议传输数据之前一定要在发送发和接收方建立连接。一般情况下,建立连接需要3步,关闭连接需要4步。

建立 TCP 连接后,由于有数据重传、流量控制等功能,TCP 协议能够正确处理丢包问题,保证接收方能够收到数据,与此同时还能够有效利用网络带宽。然而 TCP 协议中定义了很多复杂的规范,因此效率不如 UDP 协议,不适合实时的视频和音频传输。

UDP协议是面向无连接的协议。可能会丢失数据.

IP 协议中的两大关键要素是源 IP 地址和目标 IP 地址。而刚刚我们说过,传输层的主要作用是实现应用程序之间的通信。因此传输层的协议中新增了三个要素:源端口号,目标端口号和协议号。通过这五个信息,可以唯一识别一个通信。

不同的端口用于区分同一台主机上不同的应用程序。假设你打开了两个浏览器,浏览器 A 发出的请求不会被浏览器 B 接收,这就是因为 A 和 B 具有不同的端口。

TCP三次握手

Q:为什么是三次握手呢?

因为网络是不可靠的,可能存在延迟或者丢包的可能。三次握手保证了连接的可靠性。举个例子:

假设没有第三次确认,客户端向服务端发送了 SYN,请求建立连接。由于延迟,服务端没有及时收到这个包。于是客户端重新发送一个 SYN 包。回忆一下介绍 TCP 首部时提到的序列号,这两个包的序列号显然是相同的。

假设服务端接收到了第二个 SYN 包,建立了通信,一段时间后通信结束,连接被关闭。这时候最初被发送的 SYN 包刚刚抵达服务端,服务端又会发送一次 ACK 确认。由于两次握手就建立了连接,此时的服务端就会建立一个新的连接,然而客户端觉得自己并没有请求建立连接,所以就不会向服务端发送数据。从而导致服务端建立了一个空的连接,白白浪费资源。


#######三次握手建立连接

这个过程可以用以下三句形象的对话表示:

  1. (客户端)我要建立连接了。
  2. (服务端)我知道你要建立连接了,我这边没有问题。
  3. (客户端)我知道你知道我要建立连接了,接下来我们就正式开始通信。
四次握手关闭连接

这个过程可以用以下四句形象的对话表示:

  1. (客户端)我要关闭连接了。
  2. (服务端)你那边的连接可以关闭了。
  3. (服务端)我这边也要关闭连接了。
  4. (客户端)你那边的连接可以关闭了。
    由于连接是双向的,所以双方都要主动关闭自己这一侧的连接。#

Q:TCP与UDP区别
TCP特色之 数据重发

丢包重发的前提是发送方知道了接收方是否成功地接受到了消息。所有,接受端会返回一个确认应答(ACK)的通知,这表示收到了数据包.


发送方如果在一段时间内没有收到 ACK,就会重发数据:



即使网络连接正常,由于延迟的存在,接收方也有可能收到重复的数据包,因此接收方通过 TCP 首部中的 SYN 判断这个数据包是否曾经接收过。如果已经接收过,就会丢弃这个包。

应用层

HTTP协议位于最顶层的应用层里面.使用HTTP协议的时候,客户端会先于服务器的80端口简历一个tcp连接,然后在这个连接的基础上进行请求和应答。



HTTP有两个常用的版本,分别是1.0和1.1。1.0每次请求和应答都会使用一个新的TCP连接,而HTTP1.1在一个连接上进行请求和应答。

POST请求和GET请求

他们的却别:

Cookie和Session

HTTP 是一种无状态的连接,客户端每次读取 web 页面时,服务器都会认为这是一次新的会话。但有时候我们又需要持久保持某些信息,比如登录时的用户名、密码,用户上一次连接时的信息等。这些信息就由 Cookie 和 Session 保存。

这两者的根本性区别在于,cookie 保存在客户端上,而 session 则保存在服务器中。由此我们还可以拓展出以下结论:

当服务器接收到 cookie 后,会根据 cookie 中的 SessionID 来找到这个客户的 session。如果没有,则会生成一个新的 SessionID 发送给客户端。

HTTPS

我们知道 HTTP 协议直接使用了 TCP 协议进行数据传输。由于数据没有加密,都是直接明文传输,所以存在以下三个风险:

窃听风险:第三方节点可以获知通信内容。
篡改风险:第三方节点可以修改通信内容。
冒充风险:第三方节点可以冒充他人身份参与通信。

总结一下 HTTPS 协议是如何避免前文所说的三大风险的:

现在 HTTPS 协议的握手阶段变成了四步:

  1. 客户端: 你好,我要发起一个 HTTPS 请求,请给我公钥
  2. 服务器: 好的,这是我的证书,里面有加密后的公钥
  3. 客户端: 解密成功以后告诉服务器: 这是我的 (用公钥加密后的) 对称秘钥。
  4. 服务器: 好的,我知道你的秘钥了,后续就用它传输。
上一篇下一篇

猜你喜欢

热点阅读