计算机网络总结

计算机网络总结

1.网络结构

1.1 七层结构

7层是指OSI七层协议模型,主要是:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。(物数网传会表应

OSI 模型主要协议功能
应用层Telnet、FTP、HTTP、SNMP等确定通信对象,提供访问网络服务的接口
表示层CSS GIF HTML JSON XML GIF负责数据的编码、转化(界面与二进制数据转换,高级语言与机器语言的转换)数据压缩、解压,加密、解密。根据不同应用目的处理为不同的格式,表现出来就是我们看到的各种各样的文件扩展名。
会话层FTP SSH TLS HTTP(S) SQL负责建立、维护、控制会话单工、半双工、全双工三种通信模式的服务
传输层TCP UDP负责分割、组合数据,实现端到端的逻辑连接三次握手,面向连接或非面向连接的服务,流控等都发生在这一层。是第一个端到端,即主机到主机的层次。
网络层IP(IPV4、IPV6) ICMP负责管理网络地址,定位设备,决定路由
数据链路层802.2、802.3ATM、HDLC负责准备物理传输,CRC校验,错误通知,网络拓扑,流控等
物理层V.35、EIA/TIA-232负责将数据以比特流的方式发送、接收

1.2 五层结构

五层体系结构包括:应用层、运输层、网络层、数据链路层和物理层。

1.3 四层结构

4层是指TCP/IP四层模型,主要包括:应用层、运输层、网际层和网络接口层。
四层五层和七层对应
在这里插入图片描述
四层五层和七层作用对应
在这里插入图片描述

2. TCP和UDP协议

2.1 TCP的拥塞控制

  1. 慢开始:开始的时候拥塞窗口慢慢开始,然后再增加速度至阈值。
  2. 拥塞控制:到达阈值后,拥塞窗口每次加一(加法增加)。
  3. 快重传:接收方收到失序报文后立即返回重复确认,而不是等自己发送数据时捎带过去,目的时为了让发送方尽早知道发送了失序报文,当对方收到3个重复确认时,不用等重发计时器结束立即重发失序报文。
  4. 快恢复:配合快重传使用,当发生拥塞时,不再将开始值减为一,而是减为当前窗口的一半。
    在这里插入图片描述

2.2 流量控制

利用滑动窗口实现TCP的流量控制。发送方的发送窗口大小不能超过接收方的接收窗口大小。接收窗口为0时,发送方结束发送。在发送过程中接收方可通过确认报文中的窗口字段控制发送方的窗口大小。

2.3 超时重传

保证数据的可靠性。发送方传送一个数据包,会为其设置一个定时器(RTO),若在此时间内未收到确认报文,则会重传此数据包。

2.4 三次握手过程(建立连接)

  1. 第一次握手:建立连接时,客户端发送 syn 包(syn=j)到服务器,并进入 SYN_SEND 状态,等待服务器确认;

  2. 第二次握手:服务器收到 syn 包,必须确认客户的 SYN(ack=j+1),同时自己也发送一个 SYN 包(syn=k),即 SYN+ACK 包,此时服务器进入 SYN_RECV 状态;

  3. 第三次握手:客户端收到服务器的 SYN+ACK 包,向服务器发送确认包 ACK(ack=k+1),此包发送完毕,客户端和服务器进入 ESTABLISHED 状态,完成三次握手。
    在这里插入图片描述

:为什么三次?
3次握手为了完成两个重要的功能,既要双方做好发送数据的准备工作(双方都知道彼此已准备好),也要允许双方就初始序列号进行协商,这个序列号在握手过程中被发送和确认。
1、在第一次握手后,B确认自己的收信能力和A的发信能力没有问题。
2、在第二次握手后,A可以确认自己的发信和收信能力正常,B的发信和接收正常;B可以确定的A的发送能力正常,自己收信能力正常。
3、在第三次通信后,A和B均可确定自己和对方的接收发送正常。

2.5 四次握手过程(关闭连接)

  1. 客户端 A 发送一个 FIN,用来关闭客户 A 到服务器 B 的数据传送;
  2. 服务器 B 收到这个 FIN,它发回一个 ACK,确认序号为收到的序号加 1。(和 SYN 一样,一个 FIN 将占用一个序号)
  3. 服务器 B 关闭与客户端 A 的连接,发送一个 FIN 给客户端 A;
  4. 客户端 A 发回 ACK 报文确认,并将确认序号设置为收到序号加 1。
    在这里插入图片描述

:为什么四次?
由于TCP发送是全双工的,所以两个方向的连接需要单独关闭。当一方发送完数据要断开连接时,只代表这一方向上数据传输完成,但另一方向可能仍有数据传输,另一方向传输完关闭连接时,也需单独完成。

:Time-wait状态?为什么设置为2MSL时间?

  1. Time-wait状态有助于关闭连接状态。例:当发送方在最后给被动关闭方发ACK信号时丢失了,超时后被动关闭方需要重新发送FIN信号。如果没有Time-wait状态,重发的FIN信号不会被处理,所以需要主动关闭方(客户端)收到FIN信号发送ACK后2MSL时间后没有收到重发的FIN信号后再关闭。
  2. 防止已失效的连接请求报文段”出现在下次连接中。2MSL时间可以使上次连接内所产生的所有报文段都从网络中消失。这样就可以使下一个新的连接中不会出现这种旧的连接请求报文段。

:半关闭状态
当TCP链接中A向B发送 FIN 请求关闭,另一端B回应ACK之后,并没有立即发送 FIN 给A,A方处于半连接状态(半开关),此时A可以接收B发送的数据,但是A已经不能再向B发送数据。

2.6 心跳机制

心跳包之所以叫心跳包是因为:它像心跳一样每隔固定时间发一次,以此来告诉服务器,这个客户端还活着。事实上这是为了保持长连接,至于这个包的内容,是没有什么特别规定的,不过一般都是很小的包,或者只包含包头的一个空包。

TCP间隔2h发送信号,若无回复,会连续发送9次,间隔时间75S,所以总时间为:2h+(75×9)s=2h:11m:15s。若经过此些时间未回复,则认为客户端以掉线。

2.7 半关闭状态

当TCP链接中A向B发送 FIN 请求关闭,另一端B回应ACK之后,并没有立即发送 FIN 给A,A方处于半连接状态(半开关),此时A可以接收B发送的数据,但是A已经不能再向B发送数据。半关闭状态可保证数据的完全交换。

:close()函数和shutdown()函数

  1. 使用close()可中止一个连接,将描述符的引用计数减一,并不会直接关闭连接,只有当描述符的引用计数为0时才关闭连接。
  2. shutdown()不考虑描述符的引用计数,直接关闭描述符。但可选择中止一个方向的连接,只中止读或只中止写。使用此函数后TCP连接进入半关闭状态。

2.8 TCP怎么保证可靠传输?

  1. TCP会将数据分割成多个数据块(即 包);
  2. TCP会为每个包进行编号,接收方会根据编号进行排序;
  3. TCP会对每个数据包进行校验和处理;
  4. TCP接收端会丢弃重复的包(根据编号);
  5. 流量控制(滑动窗口);
  6. 拥塞控制(四个方式);
  7. 超时重传(计时器);
  8. 握手机制等。

2.9 TCP和UDP的区别

  1. 连接:TCP面向连接(先建立连接再传送信息),UDP不是。

  2. 可靠性:TCP目的为可靠传输(无差错、不失序、不重复、不丢失);UDP的目的为尽最大努力交付(会掉包、失序等)。

  3. 服务对象:TCP只支持点对点传输,UDP支持1对1、1对多、多对1传输。

  4. 效率:TCP传输效率慢,UDP传输效率快。

  5. 报文长度:TCP的报文长度会因网络的拥塞情况和接收方的窗口大小而定;UDP面向报文,不拆分,会完全保留上层传下来的数据。

  6. 首部开销:TCP首部字段固定20字节,UDP只有8字节。
    TCP首部格式:
    在这里插入图片描述
    SYN:同步序列号,表示建立连接;
    ACK:确定字符,用于响应;
    FIN:用于关闭连接;
    RST:用于重置一个已经混乱的连接;
    URG:表明紧急指针字段有效;
    PSH:当两个应用进程进行交互式的通信时,有时在一端的应用进程希望在键入一个命令后立即就能收到对方的响应。

    UDP首部格式:源端口:目的端口:长度:校验和

3. ARP、ping

  1. ARP协议
    ARP协议(地址解析协议),主要功能是将网络层IP地址转化为数据链路层MAC地址。

    过程:

    1. ARP请求:
      任何时候,当主机需要找出这个网络中的另一个主机的物理地址时,它就可以发送一个ARP请求报文,这个报文包好了发送方的MAC地址和IP地址以及接收方的IP地址。因为发送方不知道接收方的物理地址,所以这个查询分组会在网络层中进行广播。
    2. ARP响应
      局域网中的每一台主机都会接受并处理这个ARP请求报文,然后进行验证,查看接收方的IP地址是不是自己的地址,只有验证成功的主机才会返回一个ARP响应报文,这个响应报文包含接收方的IP地址和物理地址。这个报文利用收到的ARP请求报文中的请求方物理地址以单播的方式直接发送给ARP请求报文的请求方。
  2. ping命令的过程
    ping命令用于测试网络是否连接的命令。

    过程:

    1. A发送一个ICMP数据包,包含A的IP地址、MAC地址和B的IP地址,如果B的IP地址和MAC地址在ARP表中存在,直接封装成帧发送出去,如果没有 , 通过ARP协议根据B的IP地址得到MAC地址,再封装成帧发送出去。
    2. 主机B收到这个数据帧后,先检查它的目的地址,并和本机的物理地址对比,如符合,则接收;否则丢弃。接收后检查该数据帧,将IP数据包从帧中提取出来,交给本机的IP层协议。同样,IP层检查后,将有用的信息提取后交给ICMP协议,后者处理后,构建一个ICMP应答包,发送给主机A

4. IP(协议、地址)

功能:

  1. 寻址和路由。(根据对方IP地址,寻找最佳路径传输信息)
  2. 传递服务。IP协议提供不可靠(IP协议只是尽自己最大努力去传输数据包可靠性由上层协议(TCP)提供)、无连接(事先不建立会话)传输。
  3. 数据包的分片和重组。

IP地址:
IPv4是32位的。而IPv6的位数就比较大了,是128位的。

IP地址分类:
在这里插入图片描述

5. DNS相关

5.1 域名服务器

在这里插入图片描述

5.2 DNS解析过程

  1. 当用户在浏览器中输入URL访问该网站时,操作系统会先检查自己本地的hosts文件是否有这个网址映射关系,如果有,就先调用这个IP地址映射,完成域名解析。 否则2。

  2. 如果hosts里没有这个域名的映射,则本地DNS解析器缓存,是否有这个网址映射关系,如果有,直接返回,完成域名解析。 否则3。

  3. 如果hosts与本地DNS解析器缓存都没有相应的网址映射关系,首先会找本地DNS服务器(递归查询,如果要查询的域名包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析。 否则4。

  4. 查看DNS服务器的缓存中是否有此映射,有则完成解析。否则5

  5. 本地DNS服务器向13台根域名服务器查询,根域名服务器收到请求后会响应给本地域名服务器下一步需要访问的顶级域名服务器的一个IP。本地DNS服务器收到IP信息后,向此顶级域名服务器查询,此顶级域名服务器收到请求后,如果自己无法解析,则响应给本地域名服务器下一步需要访问的权限域名服务器的IP地址。当本地DNS服务器收到这个地址后,就会查询顶级域名服务器,重复上面的动作,进行查询,直至找到主机。 (此些查询为迭代查询)

  6. 本地域名服务器得到最后的解析结果,返回给客户端,并缓存。

在这里插入图片描述
在这里插入图片描述

6. HTTP协议相关

6.1 HTTP协议说明

HTTP协议( 超文本传输协议(Hypertext Transfer Protocol))基于TCP/IP的应用层的传输协议,工作在客户端-服务器模型上。

URL(统一资源定位符)。协议://主机:端口号/路径

6.2 HTTP的长短连接

短链接:客户端与服务器完成一次请求/响应后,立马断开连接,只进行一次会话。

长连接:客户端与服务器完成一次请求/响应后不立即断开,下次请求/响应直接使用此连接,一次连接可进行多次会话。

6.3 HTTP请求报文

  1. 请求行(请求类型、URL、HTTP版本)
  2. 请求头部
  3. 空行
  4. 请求数据

注:
请求类型:post、get、put、delete等

补: get和post的区别

  1. url可见性:get的参数url可见;post的url参数不可见。

  2. 数据传输上:get通过拼接url进行传递参数;post通过body体传输参数。

  3. 缓存性:get请求是可以缓存的;post请求不可缓存。

  4. 后退页面的反应:get请求页面后退时,不产生影响;post请求页面后退时,需要重新提交请求。

  5. 安全性:相对来说,post要比get安全,毕竟传输参数时url不可见。安全性不明显。

  6. 数据包:GET产生一个TCP数据包;POST产生两个TCP数据包。

    GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);

    POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。(并不是所有浏览器都会在POST中发送两次包,Firefox就只发送一次)

6.4 HTTP响应报文

  1. 状态行(版本号、状态码、状态消息)
  2. 消息报头
  3. 空行
  4. 响应正文。

补: HTTP状态码

  1. 1xx:指示信息,continue。表示请求已接收,可继续处理。
  2. 2xx:成功。表示请求已处理完毕。
  3. 3xx:重定向。要完成请求需要进一步操作。
  4. 4xx:客户端错误。
    400:bad request,请求中存在语法错误;
    401:无权限访问,需要用户名和密码;
    403:请求被服务器拒绝;
    404:请求的资源不存在;
  5. 5xx:服务器端错误。
    500:服务器执行出错;
    503:服务器停机维护;

6.5 HTTP与HTTPS区别

  1. https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
  2. http是超文本传输协议,信息是明文传输,https超文本安全传输协议,则是具有安全性的ssl加密传输协议。
  3. http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
  4. http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

6.6 HTTPS通信过程

  1. 客户端向服务端发起请求。客户端生成随机数R1 发送给服务端并告诉服务端自己支持哪些加密算法;

  2. 服务器向客户端发送数字证书。
    (1)服务端生成随机数R2;
    (2)从客户端支持的加密算法中选择一种双方都支持的加密算法(此算法用于后面的会话密钥生成);
    (3)服务端把自己的证书(包含服务器公钥)、随机数R2、会话密钥生成算法,发给客户端;

  3. 客户端验证服务器数字证书。
    客户端浏览器比较证书里的信息,如证书有效期、服务器域名和公钥,与服务器传回的信息是否一致。如果验证成功,则浏览器对服务器完成验证;否则,给出一个警告信息。

  4. 服务器验证客户端。
    服务器要求客户端发送客户端证书(包含客户端公钥)、支持的对称加密方案及其他相关信息。收到后,服务器进行相同的身份认证,若没有通过验证,则拒绝连接;注: 此处客户端给服务器发送的数据使用了服务器的公钥加密。

  5. 服务器得到会话密钥。
    服务器用私钥解密客户端发过来的信息, 服务器生成密钥(对称加密的密钥),并用客户端公钥加密后通知到浏览器。

  6. 客户端与服务端进行加密会话。
    在这里插入图片描述

补:HTTPS一般使用的加密与HASH算法如下:
非对称加密算法:RSA,DSA/DSS
对称加密算法:AES,RC4,3DES
HASH算法:MD5,SHA1,SHA256
其中非对称加密算法用于在握手过程中加密生成的密码对称加密算法用于对真正传输的数据进行加密,而HASH算法用于验证数据的完整性

6.7 HTTP2.0新特性

  1. 新的二进制格式,HTTP1.x的解析是基于文本。基于文本协议的格式解析存在缺陷,文本的表现形式有多样性,要做到健壮性考虑的场景必然很多,二进制则不同,只认0和1的组合。HTTP2.0的协议解析采用二进制格式,实现方便且健壮。

  2. 多路复用,即连接共享。HTTP2.0可以在共享TCP链接的基础上同时发送请求和响应。HTTP消息被分解为独立的帧,而不破坏消息本身的语义,交错发出去,在另一端根据流标识符和首部将他们重新组装起来。所以HTTP2.0 更容易的去实现多流并行且不用依赖建立多个 TCP 连接,即并行双向字节流的请求和响应

  3. header压缩,HTTP1.x的header带有大量信息,而且每次都要重复发送,HTTP2.0使用encoder来减少需要传输的header大小,避免了重复header的传输,又减小了需要传输的大小。

  4. 服务端推送。服务器可以向客户端推送资源,而无需客户端明确地请求。例如:当浏览器请求一个html,服务器大概知道接下来要请求资源了,而不需要等待浏览器请求解析页面再把文件返回,例如js和css文件。

  5. 请求优先级。HTTP消息会被分解为很多独立的帧,可以通过优先级调整这些帧的交错和传输顺序(HTTP2.0流里设置优先级),可以让最紧要的帧优先发送,以确保关键任务的快速展开。

6.8 浏览器输入URL后的访问流程

  1. DNS解析:根据域名获取对应的IP地址(服务器地址);
  2. TCP连接:与获取的IP地址进行TCP连接;
  3. 发送http请求:浏览器向服务器发送请求;
  4. 服务器处理http请求并返回http响应;
  5. 浏览器解析并渲染页面;
  6. 连接结束。

6.9 cookie和session

因为HTTP协议是无状态的协议。一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接。这就意味着服务器无法从连接上跟踪会话,而cookie和session两者都是为了记录客户端状态信息的机制。

  1. cookie实际是一小段文本信息,记录着客户端状态的信息。
    工作过程: 客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。服务器还可以根据需要修改Cookie的内容。

  2. Session机制是通过检查服务器上的“客户明细表”来确认客户身份。Session相当于程序在服务器上建立的一份客户档案,客户来访的时候只需要查询客户档案表就可以了。

区别:

  1. cookie数据存放在客户的浏览器上,session数据放在服务器上。
  2. cookie不是很安全,别人可以分析存放在本地的cookie进行cookie欺骗考虑到安全应当使用session
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值