TCP协议和UDP协议

不管你是使用 HTTP,还是使用 WebSocket,它们都是基于 TCP/IP 的,如果你对这些原理有足够了解,也就清楚如何去优化 Web 性能

层次图:

四层.png

注意它的层次顺序是“从下往上”数的,所以第一层就是最下面的一层。

1、第一层叫“链接层”(link layer),负责在以太网、WiFi 这样的底层网络上发送原始数据包,工作在网卡这个层次,使用 MAC 地址来标记网络上的设备,所以有时候也叫 MAC 层

2、第二层叫“网际层”或者“网络互连层”(internet layer),IP 协议就处在这一层。用 IP 地址取代 MAC 地址,把许许多多的局域网、广域网连接成一个虚拟的巨大网络,在这个网络里找设备时只要把 IP 地址再“翻译”成 MAC 地址就可以了。

3、第三层叫“传输层”(transport layer),这个层次协议的职责是保证数据在 IP 地址标记的两点之间“可靠”地传输,是 TCP 协议工作的层次,另外还有它的一个“小伙伴”UDP

4、第四层叫“应用层”(application layer),由于下面的三层把基础打得非常好,所以在这一层就“百花齐放”了,有各种面向具体应用的协议。例如 Telnet、SSH、FTP、SMTP 等等,当然还有我们的 HTTP。

MAC 层的传输单位是帧(frame),IP 层的传输单位是包(packet),TCP 层的传输单位是段(segment),HTTP 的传输单位则是消息或报文(message)。但这些名词并没有什么本质的区分,可以统称为数据包。

OSI 网络分层模型:


七层.png

第一层:物理层,网络的物理形式,例如电缆、光纤、网卡、集线器等等;
第二层:数据链路层,它基本相当于 TCP/IP 的链接层;
第三层:网络层,相当于 TCP/IP 里的网际层;
第四层:传输层,相当于 TCP/IP 里的传输层;
第五层:会话层,维护网络中的连接状态,即保持会话和同步;
第六层:表示层,把数据转换为合适、可理解的语法和语义;
第七层:应用层,面向具体的应用传输数据。

IP

  • 数据包在互联网上传输要符合IP(网络协议)标准;
  • 计算机的地址就称为 IP 地址,访问任何网站实际上只是你的计算机向另外一台计算机请求信息

1、如果把数据包主机A-> 主机B
2、传输之前,数据包会加上主机B 的IP地址信息,这样才能找到正确的地址信息;
3、除此之外,还要加上自己的(主机A的地址信息),不然主机B 回信息不知道往哪回,有来有往;
4、这些信息包含 IP 版本、源 IP 地址、目标 IP 地址、生存时间等信息。如果你要详细了解 IP 头信息;
5、当主机B接受到信息,主机 B 拆开数据包的 IP 头信息,并将拆开来的数据部分交给上层;
6、最终数据包到达了主机B 的上层

IP是很底层的协议,只负责把 数据包送到对方电脑,但是不知道送到哪个程序,是交给浏览器还是交给王者荣耀;
需要基于 IP 之上开发能和应用打交道的协议,最常见的是“用户数据包协议(User Datagram Protocol)”,简称 UDP

TCP(传输控制协议)

对于要求数据传输可靠的应用;如果使用UDP 可能会出现:数据包会在传输的过程中丢失;或者是大文件被拆分成小数据来传输,不同时间段到接受端,UDP 协议并不知道如何组装这些数据包。所以引入TCP

  • TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议
  • 关于数据包丢失的情况;TCP 建立重传机制;
  • TCP 引入了数据包排序机制,用来保证把乱序的数据包组合成一个完整的文件
  • 和 UDP 头一样,TCP 头除了包含了目标端口和本机端口号外,还提供了用于排序的序列号,以便接收端通过序号来重排数据包
  • TCP 单个数据包的传输流程和 UDP 流程差不多,不同的地方在于,通过 TCP 头的信息保证了一块大的数据传输的完整性。

TCP 连接过程(建立连接- 传输数据 - 断开连接):

440ee50de56edc27c6b3c992b3a25844.png
  • 建立连接:通过三次握手和服务端建立连接;
  • 数据传输:接收端需要对每个数据包进行确认操作,,也就是接收端在接收到数据包之后,需要发送确认数据包给发送端;如果发送方没有收到接收方确认收到的消息,则默认数据包丢失,启动重新发送机制;
  • 一个大的文件在传输过程中会被拆分成很多小的数据包,这些数据包到达接收端后,接收端会按照 TCP 头中的序号为其排序,从而保证组成完整的数据。
  • 最后,断开连接阶段,数据传输完毕要终止连接。涉及到最后一个阶段 要四次挥手来保证双方都断开连接。
TCP 三次握手:

1、主机A 向主机B发送:我可以给你发送数据吗?;发送一个含有同步序列号的标志位的数据段给主机B:告诉B我想要和你通信,你用哪个序列号起始的数回应我
2、主机B 收到请求后:‘可以,什么时候发?’;用一个带有确认应答(ACK)和同步序列号(SYN)标志位的数据段响应主机A:告诉A收到你的消息,你可以发了,你要用那个序列号来回应我;
3、主机A 收到主机B消息: 回复确认收到消息,我现在要准备发送实际数据,完成3次握手


20180810095413143.png

更详细的历程:


image.png
WechatIMG595.png

第一步:

  • 客户端 将标注位SYN置1随机产生一个值seq=J,并将数据包发给服务端;
  • 客户端进入SYN_SENT状态,等待Server确认。SYN:同步序列编号

第二步:

  • 服务端收到数据包后标志位SYN=1知道Client请求建立连接;
    服务端将标志位,SYN和ACK都置1,
  • 随机产生一个值,并将数据包发给Client确认连接请求,Server进入SYN_RCVD状态

第三步:

  • 客户端 收到确认后若ACK为1,则将该数据包发送给服务端;
  • 服务端检查ACK为1则连接建立成功,Client与Server进入ESTABLISHED状态完成三次握手,可以传输数据。

UDP

  • 无连接,可提供可靠服务
  • 是一个简单的面向数据报的运输层协议
  • 它不提供可靠性,只是把应用程序传给IP层的数据报发送出去,但是不能保证它们能到达目的地
  • UDP 不能保证数据可靠性,但是传输速度却非常快
  • 所以UDP 一般应用在要求速度,但是没那么要求数据完整性的领域,比如在线视频等;
UDP:把数据包送达应用程序

1、UDP 中一个最重要的信息是端口号,通过端口号UDP 就能把数据包送到指定的程序;
2、端口号会被装进 UDP 头里面,UDP 头再和原始数据包合并组成新的 UDP 数据包

结合IP和UDP总结主机A到主机B的过程

1、主机A将要传输的数据---> 传输层;
2、在传输层: 要传输的数据包+ UDP ---> 组成新的UDP 数据包 ---> 传到网络层;
3、在网络层: 要传的数据包+UDP+IP---> 新的IP数据包,交到底层传到主机B
4、到主机B的网络层:拆解IP信息,将( 要传输的数据包+ UDP)传到传输层;
5、在传输层:数据包中的 UDP 头会被拆开,并根据 UDP 中所提供的端口号,把数据部分交给上层的应用程序;

TCP 为什么是三次握手?

三次握手双方收发功能正常,所以四次显得很是多余

TCP 四次挥手
image.png
  • 1、客户端进程发出连接释放报文,并且停止发送数据;
    客户端向服务端发送FIN=1,其序列号为seq=u(等于前面已经传送过来的数据的最后一个字节的序号加1),此时,客户端进入FIN-WAIT-1(终止等待1)状态

  • 2、服务器收到连接释放报文,发出确认报文,ACK=1,ack=u+1,并且带上自己的序列号seq=v; 此时,服务端就进入了CLOSE-WAIT(关闭等待)状态

  • 3、客户端收到服务器的确认请求后,此时,客户端就进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文(在这之前还需要接受服务器发送的最后的数据

  • 4、服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,FIN=1,ack=u+1,由于在半关闭状态,服务器很可能又发送了一些数据,假定此时的序列号为seq=w,此时,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。

  • 5、客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态。注意此时TCP连接还没有释放,必须经过2∗∗MSL(最长报文段寿命)的时间后,当客户端撤销相应的TCB后,才进入CLOSED状态

  • 6、服务器只要收到了客户端发出的确认,立即进入CLOSED状态。同样,撤销TCB后,就结束了这次的TCP连接。可以看到,服务器结束TCP连接的时间要比客户端早一些。

首先http是一个应用层的传输协议,而https是基于ssl和tls对http做了一个加密过程,因此https是跨应用层和传输层的协议。

HTTPS 工作原理:

20180405153723727.jpeg

1、客户端发起HTTPS请求
2、服务端的配置
3、传送证书: 这个证书其实就是公钥,只是包含了很多信息,如证书的颁发机构,过期时间等等
4、客户端解析证书

这部分工作是有客户端的TLS来完成的,首先会验证公钥是否有效,比如颁发机构,过期时间等等,如果发现异常,则会弹出一个警告框,提示证书存在问题。

如果证书没有问题,那么就生成一个随机值,然后用证书对该随机值进行加密,就好像上面说的,把随机值用锁头锁起来,这样除非有钥匙,不然看不到被锁住的内容

5、传送加密信息
6、服务段解密信息
7、传输加密后的信息
这部分信息是服务段用私钥加密后的信息,可以在客户端被还原。
8、客户端解密信息

参考文章:李兵《浏览器工作原理与实践》
TCP的三次握手与四次挥手理解及面试题

你可能感兴趣的:(TCP协议和UDP协议)