TCP/IP/UDP/Http/Https协议

16 阅读6分钟

TCP协议与UDP协议有哪些区别呢?

1.网络协议5层数据模型

image.png 应用层:根据Http协议组装数据包。 传输层:增加TCP头部,包含端口号,序列号等。 网络层:增加IP头部,包含源IP地址等。 数据链路层:增加以太网头部,包含MAC地址等。 物理层:物理媒介如:网线,电缆

2.TCP报文

1734516998427.jpg

源端口 (Source Port)16位发送方应用程序的端口号
目的端口 (Destination Port)16位接收方应用程序的端口号
序列号 (Sequence Number)32位本报文段所发送数据的第一个字节的编号
确认号 (Acknowledgment Number)32位期望收到的下一个报文段的序列号,意味着此序号之前的数据已确认收到
数据偏移 (Data Offset)4位指示TCP头部长度(以4字节为单位),用于定位数据开始位置
保留字段 (Reserved)6位保留为未来使用,目前必须置为0
标志位 (Flags)6位包括URG、ACK、PSH、RST、SYN、FIN等关键控制位
窗口大小 (Window Size)16位用于流量控制,指示接收方还能接收的字节数
校验和 (Checksum)16位用于校验TCP报文段(包括头部和数据)在传输中是否出错
紧急指针 (Urgent Pointer)16位当URG=1时有效,指示本报文段中紧急数据的结束位置
选项和填充 (Options and Padding)长度可变用于支持扩展功能,如最大报文段长度(MSS),填充确保头部长度是32位的整数倍

注意:TCP报文段的首部是固定的20字节(byte),1个byte占8w位,总共是32*5=160位。

3.TCP/IP协议三次握手

image.png

第一次握手:客户端向服务器发送一个请求连接的TCP报文,SYN位置为1,序列号seq是32位随机值x;
第二次握手:服务器收到该报文后,会向客户端发送一个确认,并请求建立连接的TCP报文,SYN标志位,置为1,序列号seq是32位随机值y,ACK标志位置为1,确认号ack为x+1;
第三次握手:客户端收到该TCP报文后,发送一个确认的TCP报文给服务端,ACK标志位设置为1,确认号 ack=y+1;

4.TCP/IP协议四次挥手

1727166285375.png

第一次挥手:客户端向服务器发送一个断开连接的TCP报文,FIN位,置为1,序列号seq是32位随机值x.
第二次挥手:服务端向客户端发送确认收到TCP报文,ACK位,置为1,确认号ack是x+1.
第三次挥手:服务器一直忙忙忙,客户端一直等等等,等到服务器忙完了,服务器向客户端发送断开连接的TCP报文,FIN位置为1,序列号seq=y.
第四次挥手:客户端向服务器发送一个确认断开的TCP报文,ACK位置为1,确认号ack=y+1.

5.TCP协议和UDP协议

TCP协议特点: 面向连接,基于字节流,可靠,不容易丢包,一对一的传输层通信协议。【文件传输,网页浏览,电子邮件】

UDP协议特点: 不需要连接,基于用户数据报,不可靠,容易丢包,一对一,一对多的传输层通信协议。【视频会议,直播】

image.png

6.谈谈你对TCP流量控制和拥塞控制的理解

  • 流量控制 之所有会有流量控制,是接收方怕发送方发送的太快,来不及处理,如果发送方的速率过大,接收方的速率过小,一旦填满接收方的缓冲区之后,多余的数据就会被丢弃,从而导致丢包。TCP报文中有一个window字段,表示窗口的大小,可以控制接收方的接收速率。

  • 拥塞控制 之所有会有拥塞控制,是因为网络怕发送方发送的太快,造成网络拥塞,使得网络来不及处理。

7.谈一谈你对Http和https的关系理解

http协议是明文传输,数据是未加密的,安全性较差 https协议是基于SSL/TLS协议构建的Http协议,比较耗费资源。 https协议需要在http三次握手建立tcp连接的情况下,为了保证服务端和和客户端数据传输的安全性和保密性,引入了SSL/TSL协议。

TLSL协议的基本过程是这样的:

客户端发起https请求,DNS解析(把域名变成ip地址),TCP三次握手之后建立连接.

  • 基于SSL(安全套接层协议)握手阶段流程(建立安全连接,采用非对称加密RSA,获取回话秘钥)

    (1).客户端向服务端发送一个加密通信的请求,并指明它支持的算法。(RSA非对称加密算法)

    (2).服务器收到请求后,会把自己的向CA申请的包含公钥的证书,发送给客户端。

    (3).客户端验证服务端证书的有效性,如果验证通过,就会生成一个随机值,并使用证书中包含的公钥(锁头 )对其进行加密,然后传给服务端。

    (4).服务端使用自己的私钥,对这个加密的随机值进行解密,然后把这个随机值作为双方通信的会话秘钥,双方握手完成。

  • 基于TLS(传输层安全协议)数据传输阶段

    (1).在数据传输阶段,双发使用SSL握手阶段协商出来的会话秘钥进行对称加密通信。(DES,ASE对称加密)

什么是对称加密和非对称加密?
  • 对称加密是指加密和解密使用相同秘钥的加密算法。
  • 非对称加密是指加密和解密使用不同秘钥的加密算法。
输入一串包含URL到浏览器,都经历了什么?
  • https协议: DNS解析(查询IP地址)>>TCP三次握手>>TLS握手(协商密钥)>>client发送Https请求>>server处理https请求,并返回http报文 浏览器解析并渲染界面>>Https连接断开.

  • http协议 DNS解析>>TCP三次握手>>client发送Https请求>>server处理https请求,并返回http报文 浏览器解析并渲染界面>>Http连接断开.

8.断点续传的原理

核心原理就是利用Http请求头中的Range:bytes=200,和响应头中的Content-Range 200-/2000字段. 当我们下载文件到200bytes时,网络突然断了,记录断点的位置

HttpURLConnection httpUrlConnection=new HttpURLConnection();
httpUrlConnection.setReqeustProperty("RANGE","bytes=200");

当网络恢复,从新下载时,我们可以从服务器响应头中的Content-Range字段拿到断点的位置,然后从该位置进行下载

RandomAccess radomAccessFile=new RandowAccessFile();
randomAccessFile.seek(200);
randomAccessFile.write(...);
···