计算机网络基础

文章目录

    • 1.网络分层
    • 2.三次握手四次挥手
      • 三次握手基本原理
      • 为什么是三次,两次不行吗
      • 四次挥手基本原理
    • 3.TCP与UDP的区别
    • 4.输入一个url之后发生了什么
    • 5.常用状态码
    • 6.滑动窗口
    • 6.拥塞控制
    • 7.TCP如何保证可靠传输
    • 8.cookie
    • 9.HTTPS

1.网络分层

计算机网络基础_第1张图片

2.三次握手四次挥手

三次握手基本原理

SYN:携带这个标志的包正在发起连接请求
FIN:携带这个标志的包正在请求终止连接

下图来自《Wireshark网络分析》"TCP的连接启蒙"部分(左图是wireshark启动relative sequence number的结果)
计算机网络基础_第2张图片

  • 一次握手:客户端发送带有SYN、Seq(序号)标志的数据包->服务端
  • 二次握手:服务端发送带有SYN、ACK(前面序号+1)、Seq(序号)标志的数据包->客户端
  • 三次握手:客户端发送带有ACK(前面序号+1)标志的数据包->服务端

为什么是三次,两次不行吗

两个也可以,但是不可靠。
假如客户端请求的第一个包跑到一条延迟严重的路径上,迟迟没有到达服务器,客户端就会当这个请求丢失了,会再请求一次,而这次非常顺利的到达了服务器且完成了工作关闭连接。这时,那条延迟的请求到达了,又会建立一次连接,但是这次连接没有任何用处。如果是三次握手的话,客户端收到服务器的回复时,知道这个连接不是它想要的,就发送一个拒绝包,服务器收到后也就放弃了这个连接。

计算机网络基础_第3张图片

四次挥手基本原理

参考大佬
计算机网络基础_第4张图片

  • 客户端:发送FIN、seq(前面数据的最后序号+1)到服务器,客户端进入FIN-WAIT-1(终止等待1)状态
  • 服务器:确认,发送ack(收到的seq+1)、seq,服务器进入CLOSE-WAIT(关闭等待状态)。
  • 客户端收到请求后,就进入FIN-WAIT2(终止等待2)状态,等待服务器发送释放报文
  • 服务器传输最后的数据
  • 服务器:服务器最后的数据发送完毕,关闭连接,发送FIN标志给客户端,服务器进入LAST-ACK(最后确认阶段)
  • 客户端:发回ACK确认

3.TCP与UDP的区别

  • TCP基于连接,建立连接需要三次握手,断开连接需要四次挥手,UDP不需要连接
  • TCP有流量控制和拥塞控制,UDP没有

4.输入一个url之后发生了什么

  1. DNS解析。浏览器通过DNS查找域名的IP地址(过程:浏览器缓存,路由器缓存,DNS缓存)。
  2. TCP连接。三次握手。
  3. 发送HTTP请求。
  4. 服务器处理请求并返回HTTP报文。
  5. 浏览器解析渲染页面。
  6. 连接结束。四次挥手。

使用到的协议:

  • DNS:获取域名的IP地址
  • TCP:建立TCP连接
  • IP:建立TCP协议时,需要发送数据,发送数据在网络层使用IP协议。
  • ARP:路由器在与服务器通信时,需要将IP地址转换为MAC地址,使用ARP协议。
  • HTTP:TCP建立完成后,使用HTTP协议访问网页。

5.常用状态码

2XX:成功
典型200 OK
3XX:重定向
4XX:客户端错误
典型404 Not Found
5XX:服务器错误
典型500 Internal Server Error

6.滑动窗口

本小节参考《网络是怎样连接的》2.3.5使用窗口有效管理ACK

常见包的传输方式,为一来一回,滑动窗口也就是让包一次传输好多个,加快传输效率。具体就是接受方存在一个接收缓冲区,在开始的时候,先向发送方声明缓冲区的大小,然后发送方开始传输,每次从缓冲区取走数据的时候,更新缓冲区大小告知发送方。为了减少传输,通常把ACK确认和窗口更新合并发送。
计算机网络基础_第5张图片

6.拥塞控制

本小节参考《Wireshark网络分析》“重传的讲究”。

发送窗口受接收窗口网络影响,其中限制得更严的因素起决定作用。当发送窗口由接收窗口决定的时候,可以通过"window size:"的值判断。如果由网络问题决定,就变得非常复杂。
网络之所以能限制发送窗口,是因为它一口气收太多数据就会拥塞,导致丢包。这个导致拥塞的数据量称为拥塞点,这个点根据网络的情况,有时堵有时空,是一个动态的值。

发送方会维持一个虚拟的拥塞窗口,使它尽可能接近真实的拥塞点:
计算机网络基础_第6张图片

  • 连接刚刚建立的时候,发送方对网络状态一无所知,发送窗口定的非常小。
  • 慢启动过程:如果发出去的包都得到确认,可以增大拥塞窗口(翻倍)。
  • 拥塞避免过程:慢启动持续一段时间后,拥塞窗口达到一个较大值,这时每个往返增加一个MSS。如果之前发生过拥塞,就把该拥塞点作为参考;如果没有就取最大接收窗口。

无论怎样,始终还是会达到拥塞点,这个时候就会发生重传,有两种重传方式。

  • 超时重传。当发出去的包没有得到确认时,暂停等待,这段时间什么也做不了,如果迟迟收不到,触发重传,这样对传输性能有严重影响,并且触发超时重传后,会重新调整临界窗口值(Richard Stevens在《TCP/IP Illustrated》中定为上次拥塞时发送窗口的一半),接下来的传输也慢多了。
    计算机网络基础_第7张图片
  • 快速重传。有时候拥塞很轻微,只有少量的包丢失,后续还有正常包到达。当后续的包到达接收方时,接收方发现其Seq号比期望的大,所以它每收到一个包就Ack一次期望的Seq号,以此提醒发送方重传。当发送方收到3个或以上重复确认时,就意识到相应的包丢失了,立刻重传它。快速重传不像超时重传需要等待一段时间,并且临界窗口值也没必要调整,接下来传慢一点就可以了。
    计算机网络基础_第8张图片
    为什么是三个及以上,因为网络包有时候会轻微乱序,为了乱序完全没有重传的必要。

相比之下,超时重传对性能影响最大,应尽量避免超时重传。

7.TCP如何保证可靠传输

  • 序列号与确认应答(Seq与ack)
  • 超时重传与快速重传
  • 连接管理(三次握手四次挥手)
  • 流量控制(通过滑动窗口机制,使接受窗口控制发送窗口)
  • 拥塞控制(拥塞窗口控制发送窗口)

8.cookie

HTTP是无状态协议,不对之前的请求和响应状态进行管理,这就意味着,要求登录认证的web页面每次跳转都会重新登录,cookie正是用于解决这类问题而存在的,
cookie技术通过在请求和响应报文中写入cookie的信息来控制客户端的状态,cookie会根据从服务器端发送的响应报文内的一个叫做set-cookie的首部字段信息,通知客户端保存cookie。当下次客户端再往服务器发送请求时,客户端会自动在请求报文中加入cookie值后发送出去。服务端发现客户端发送过来的cookie后,会去检查究竟是从哪一个客户端发来的连接请求,然后对比服务器上的记录,得到之前的状态信息。
图片来自《图解HTTP》
计算机网络基础_第9张图片

9.HTTPS

采用混合加密方式,在交换密匙环节使用公开密匙加密,之后的建立通信交换报文阶段则使用共享密匙加密方式。由于无法确定公开密匙是否来自目标,所以引入了数字认证机构(CA)。
首先服务器要向数字认证机构申请公匙证书,数字认证机构判明服务器的身份后,用自己的私有密匙部署数字签名并颁发公匙证书,连接的时候,服务器向客户端发送公匙证书,客户端拿到后,用数字认证机构的公开密匙解密数字签名,确认真实性,然后再使用服务器的公开密匙对报文(共享密匙)加密传输,服务器再用私有密匙对报文解密。之后的传输,都依靠共享密匙就行了。

与HTTP的区别

  • HTTPS默认端口443,HTTP默认使用端口80。
  • HTTP运行在TCP之上,所有传输的内容都是明文,客户端和服务端都无法验证对方身份。HTTPS是运行在SSL/TLS之上的HTTP协议,SSL/TLS运行在TCP之上,所有传输内容都经过加密-混合加密。

你可能感兴趣的:(Java,http,网络,服务器)