TCP协议、UDP协议和HTTP协议基础

属于TCP/IP体系结构(TCP/IP的四层协议)中的运输层(计算机网络基础)

架构位置:

 

 

 

 

TCP协议:(传输控制协议)

使用TCP协议前,必须先建立连接,形成传输数据通道,此协议提供面向连接的服务,是面向连接的运输层协议

建立连接的目的:通信双方为接下来的数据传送做好准备,初始化各种状态变量,分配缓存等资源

 

l  TCP不提供广播或者多播的服务

l  传输前“采用三次握手”方式,点对点通信,提供全双工的服务,是可靠的

l  TCP协议进行通信的两个应用程序:客户端和服务端

l  在连接中可进行大数据量的传输,保证数据的顺序

l  TCP面向字节流,使用流模式

l  数据传输完毕,需释放已建立的连接,增加了开销,如确认、流量控制、计时器以及计时管理等,效率低,对系统资源的要求较多

l  保证数据正确性

 

采用C-S方式

客户(Client):主动发起连接建立的应用进程

服务器(Server):被动等待连接建立的应用进程

图示

三次握手

 

四次挥手

 

 

 

 

建立TCP连接需要三次握手

三次握手(三次联络):A发送一个报文给B(第一次),B返回确认的信息(第二次),然后A收到信息后就确认B是已经确认的了,A再发送加以确认的信息给B(第三次)。

此过程来回联络共三次(有点套娃的感觉)

第三次握手的时候,是可以携带数据的,但是,第一次、第二次握手不可以携带数据

断开连接则需要四次挥手

(1) TCP客户端发送一个FIN,用来关闭客户到服务器的数据传送。

(2) 服务器收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号。

(3) 服务器关闭客户端的连接,再发送一个FIN给客户端。

(4) 客户端发回ACK报文确认,并将确认序号设置为收到序号加1,此时服务器不需要回应

 

TCP生活实例:打电话

 

UDP协议:(用户数据报协议)

Internet 协议集支持一个无连接的传输协议,该协议称为用户数据报协议

 

l  将数据、源、目的封装成数据包,不需要先建立连接

使用数据报模式,每个数据报的大小限制在64K内

l  发送不管对方是否准备好,接收方运输层在收到UDP报文后,接收方收到也不确认,所以只能提供不可靠的交付

l  发送数据结束时无需释放资源,开销小,速度快

l  程序结构较简单

l  对系统资源的要求较少

l  可能会丢包,不保证数据顺序

  

UDP生活实例:群发短信、群发电报、看直播

 

优点:

1、 无连接,减少开销和发送数据之前的时延

2、 尽最大努力的交付,不需要复杂的连接

3、 UDP没有拥挤控制,符合线上视频对话应用的要求

4、 面向报文

5、 支持一对一、一对多、多对一和多对多的交互通信

 

常见问题

——摘自博客园博主zmlctt:https://www.cnblogs.com/zmlctt/p/3690998.html

 

TCP协议和UDP协议的区别是什么?

TCP协议是有连接的,有连接的意思是开始传输实际数据之前TCP的客户端和服务器端必须通过三次握手建立连接,会话结束之后也要结束连接。而UDP是无连接的

TCP协议保证数据按序发送,按序到达,提供超时重传来保证可靠性,但是UDP不保证按序到达,甚至不保证到达,只是努力交付,即便是按序发送的序列,也不保证按序送到。

TCP协议所需资源多,TCP首部需20个字节(不算可选项),UDP首部字段只需8个字节。

TCP有流量控制和拥塞控制,UDP没有,网络拥堵不会影响发送端的发送速率

TCP是一对一的连接,而UDP则可以支持一对一,多对多,一对多的通信。

TCP面向的是字节流的服务,UDP面向的是报文的服务。

 

三次握手建立连接时,发送方再次发送确认的必要性?

主要是为了防止已失效的连接请求报文段突然又传到B,因而产生错误。假定出现一种异常情况,即A发出的第一个连接请求报文段并没有丢失,而是在某些网络结 点长时间滞留了,一直延迟到连接释放以后的某个时间才到达B,本来这是一个早已失效的报文段。但B收到此失效的连接请求报文段后,就误认为是A又发出一次 新的连接请求,于是就向A发出确认报文段,同意建立连接。假定不采用三次握手,那么只要B发出确认,新的连接就建立了,这样一直等待A发来数据,B的许多 资源就这样白白浪费了。

 

四次挥手释放连接时,等待2MSL的意义?

第一,为了保证A发送的最有一个ACK报文段能够到达B。这个ACK报文段有可能丢失,因而使处在LAST-ACK状态的B收不到对已发送的FIN和ACK 报文段的确认。B会超时重传这个FIN和ACK报文段,而A就能在2MSL时间内收到这个重传的ACK+FIN报文段。接着A重传一次确认。

第二,就是防止上面提到的已失效的连接请求报文段出现在本连接中,A在发送完最有一个ACK报文段后,再经过2MSL,就可以使本连接持续的时间内所产生的所有报文段都从网络中消失。

 

常见的应用中有哪些是应用TCP协议的,哪些又是应用UDP协议的,为什么它们被如此设计?

多播的信息一定要用udp实现,因为tcp只支持一对一通信。

如果一个应用场景中大多是简短的信息,适合用udp实现,因为udp是基于报文段的,它直接对上层应用的数据封装成报文段,然后丢在网络中,如果信息量太大,会在链路层中被分片,影响传输效率。

如果一个应用场景重性能甚于重完整性和安全性,那么适合于udp,比如多媒体应用,缺一两帧不影响用户体验,但是需要流媒体到达的速度快,因此比较适合用udp

如果要求快速响应,那么udp听起来比较合适

如果又要利用udp的快速响应优点,又想可靠传输,那么只能考上层应用自己制定规则了。

常见的使用udp的例子:ICQ,QQ的聊天模块。

 

HTTP协议(超文本协议)

超文本传输协议是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。

请求和响应消息的头以ASCII形式给出;而消息内容则具有一个类似MIME的格式。

Https:比 Http安全

客户端---->服务器:请求--(GET请求,POST请求)

服务器---->客户端:响应

 

HTTP是基于客户/服务器模式,且面向连接的。

典型的HTTP事务处理有如下的过程:

(1)客户与服务器建立连接;

(2)客户向服务器提出请求;

(3)服务器接受请求,并根据请求返回相应的文件作为应答;

(4)客户与服务器关闭连接。

 

常用的响应码说明

 

200        表示请求响应成功

3xx         表示请求重定向,到新的网址去

4xx         表示服务器已经收到请求,但是你要的数据不存在(请求地址错误),找不到资源或资源不存在

5xx         表示服务器已经收到请求,但是服务器内部错误(代码错误)或者网关错误

 

请求转发:服务器收到请求后,从一次资源跳转到另一个资源的操作叫请求转发 

 

请求转发特点:

1、浏览器的地址栏没有变化

2、它们是一次请求

3、共享request域中的数据

4、可以转发到WEB-INF目录下

5、是否可以访问工程以外的资源

                        

posted @ 2021-01-11 17:10  ChungSang  阅读(429)  评论(0)    收藏  举报