TCP、UDP、HTTP的个人理解

HTTP、TCP、UDP都是传输协议。

HTTP

是超文本传输协议,是应用层的传输协议,是一种基于TCP协议的应用层传输协议。主要的作用是解析传输的数据,其实通过TCP就可以将数据在客户端和服务器之间顺利传输,但是需要知道传输到底是什么内容的话就需要HTTP协议的参与。

TCP协议

是一种面向连接的传输控制协议,工作在传输层。服务器端与客户端之间的通信每次都需要建立实际的连接,有长连接和短连接之分。连接开始的时候是三次握手,连接结束时候是四次握手。TCP协议是一种面向连接的传输协议,这就对每次连接数据的正确性有了保障,但是随之而来的缺点就是每次都需要连接开始的三次握手和四次握手,这就大大增加了每次连接的代价,传输的效率就降低了。这是与UDP传输协议最大的区别。

一个TCP报文除了包含要传输的数据外,还包含源IP地址和目标IP地址,源端口和目标端口。

端口有什么作用?在两台计算机通信时,只发IP地址是不够的,因为同一台计算机上跑着多个网络程序。一个TCP报文来了之后,到底是交给浏览器还是QQ,就需要端口号来区分。每个网络程序都向操作系统申请唯一的端口号,这样,两个进程在两台计算机之间建立网络连接就需要各自的IP地址和各自的端口号。

一个进程也可能同时与多个计算机建立链接,因此它会申请很多端口。

在这里插入图片描述
三次握手、四次握手实际上就是来确认服务器或者客户端是否已经准备好接收数据了。
第一次握手:建立连接。客户端发送连接请求报文段,将SYN位置为1,Sequence Number为x;然后,客户端进入SYN_SEND状态,等待服务器的确认;
第二次握手:服务器收到客户端的SYN报文段,需要对这个SYN报文段进行确认,设置Acknowledgment Number为x+1(Sequence Number+1);同时,自己自己还要发送SYN请求信息,将SYN位置为1,Sequence Number为y;服务器端将上述所有信息放到一个报文段(即SYN+ACK报文段)中,一并发送给客户端,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK报文段。然后将Acknowledgment Number设置为y+1,向服务器发送ACK报文段,这个报文段发送完毕以后,客户端和服务器端都进入ESTABLISHED状态,完成TCP三次握手。

完成了三次握手,客户端和服务器端就可以开始传送数据。以上就是TCP三次握手的总体介绍。通信结束客户端和服务端就断开连接,需要经过四次分手确认。

第一次分手:主机1(可以使客户端,也可以是服务器端),设置Sequence Number和Acknowledgment Number,向主机2发送一个FIN报文段;此时,主机1进入FIN_WAIT_1状态;这表示主机1没有数据要发送给主机2了;
第二次分手:主机2收到了主机1发送的FIN报文段,向主机1回一个ACK报文段,Acknowledgment Number为Sequence Number加1;主机1进入FIN_WAIT_2状态;主机2告诉主机1,我“同意”你的关闭请求;
第三次分手:主机2向主机1发送FIN报文段,请求关闭连接,同时主机2进入LAST_ACK状态;
第四次分手:主机1收到主机2发送的FIN报文段,向主机2发送ACK报文段,然后主机1进入TIME_WAIT状态;主机2收到主机1的ACK报文段以后,就关闭连接;此时,主机1等待2MSL后依然没有收到回复,则证明Server端已正常关闭,那好,主机1也可以关闭连接了。

可以看到一次tcp请求的建立及关闭至少进行7次通信,这还不包过数据的通信,而UDP不需3次握手和4次分手。

UDP协议

是一种面向无连接的传输控制协议,工作在传输层。既然UDP是一种无连接的协议,那么它在传输数据的时候不必在客户端与服务器之间建立连接,那么它显而易见的优点就是传输效率较高,免去了TCP协议的三次握手、四次握手这一繁琐的步骤,它的传输效率大大的增强了,实时性更高了。但是无连接也造成了一个问题就是:每次服务器和客户端之间的通讯两方无法确认到底这个传输的数据是否正确,或者是否被传输到目的地。

TCP/IP

TCP/IP是个协议组,可分为四个层次:网络接口层、网络层、传输层和应用层。
网络层有IP协议、ICMP协议、ARP协议、RARP协议和BOOTP协议。
传输层中有TCP协议与UDP协议。
应用层有FTP、HTTP、TELNET、SMTP、DNS等协议。
因此,HTTP本身就是一个协议,是从Web服务器传输超文本到本地浏览器的传送协议。

TCP与UDP的适用场景

  1. TCP用于在传输层有必要实现可靠传输的情况。
  2. UDP主要用于那些对高速传输和实时性有较高要求的通信或广播通信。
    举一个通过 IP 电话进行通话的例子。如果使用 TCP,数据在传送途中如果丢失就会被重发,这样就会导致无法流畅地传输通话人的声音。而采用UDP,它不会进行重发处理,从而也就不会有声音大幅度延迟到达的问题,即使有部分数据丢失,也只是会影响某一小部分的通话。

学习链接
一篇搞懂TCP、HTTP、Socket、Socket连接池
1小时教你理解HTTP,TCP,UDP,Socket,WebSocket
通信协议——Http、TCP、UDP
小哥哥,小姐姐,我有一份tcp、http面试指南你要吗?
TCP和Http的区别!我都搞懂了,你就别迷糊了!
TCP/UDP/HTTP的区别和联系

猜你喜欢

转载自blog.csdn.net/qq_37002901/article/details/86615740