TCP、UDP和HTTP简述整理

Wesley13
• 阅读 834

http:是用于www浏览的一个协议。
tcp:是机器之间建立连接用的到的一个协议。

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

2、HTTP协议是建立在请求/响应模型上的。首先由客户建立一条与服务器的TCP链接,并发送一个请求到服务器,请求中包含请求方法、URI、协议版本以及相关的MIME样式的消息。服务器响应一个状态行,包含消息的协议版本、一个成功和失败码以及相关的MIME式样的消息。
HTTP/1.0为每一次HTTP的请求/响应建立一条新的TCP链接,因此一个包含HTML内容和图片的页面将需要建立多次的短期的TCP链接。一次TCP链接的建立将需要3次握手。
另外,为了获得适当的传输速度,则需要TCP花费额外的回路链接时间(RTT)。每一次链接的建立需要这种经常性的开销,而其并不带有实际有用的数据,只是保证链接的可靠性,因此HTTP/1.1提出了可持续链接的实现方法。HTTP/1.1将只建立一次TCP的链接而重复地使用它传输一系列的请求/响应 消息,因此减少了链接建立的次数和经常性的链接开销。

3、结论:虽然HTTP本身是一个协议,但其最终还是基于TCP的。不过,目前,有人正在研究基于TCP+UDP混合的HTTP协议。

------------------------------------------------------------------------------------------------------------------------------------------------------------------------

具体介绍

IP (网际协议) 在网络通信中,网络组件的寻址对信息的路由选择和传输来说是相当关键的。相同网络中的两台机器间的消息传输有各自的技术协定。LAN 是通过提供6字节的唯一标识符(“MAC”地址)在机器间发送消息的。SNA 网络中的每台机器都有一个逻辑单元及与其相应的网络地址。DECNET、AppleTalk 和 Novell IPX 均有一个用来分配编号到各个本地网和工作站的配置。

HTTP是超文本传输协议,是客户端浏览器或其他程序与Web服务器之间的应用层通信协议。在Internet上的Web服务器上存放的都是超文本信息, 客户机需要通过HTTP协议传输所要访问的超文本信息。HTTP包含命令和传输信息,不仅可用于Web访问,也可以用于其他因特网/内联网应用系统之间的通信,从而实现各类应用资源超媒体访问的集成

TCP (传输控制协议)  通过序列化应答和必要时重发数据包,TCP 为应用程序提供了可靠的传输流和虚拟连接服务。TCP 主要提供数据流转送,可靠传输,有效流控制,全双工操作和多路传输技术。

  至于HTTP协议,它是TCP协议族中的一种。使用TCP的80端口

  HTTP是应用层协议,TCP是传输层协议!数据包在网络传输过程中,HTTP被封装在TCP包内!!

TCP/UDP

TCP:在正式收发数据前必须和对方建立可靠的连接。一个TCP连接必须要经过三次“对话”才能建立起来,过程非常复杂;

UDP:正式通信前不必与对方先建立连接,没有TCP的握手、确认、窗口、重传、拥塞控制等机制,不管对方状态就直接发送。

tcp协议和udp协议的差别

TCP

UDP

是否连接

面向连接

面向非连接

传输可靠性

可靠服务

无状态的传输协议,不可靠

连接点

只能是点到点

支持一对一,一对多,多对一和多对多的交互通信

速度

慢,效率低,占用系统资源高

无差错,不丢失,且保证数据顺序

快,资源要求少

易丢包,不保证顺序,尽最大努力交付

应用场合

传输少量数据,对可靠性要求较高的场合

浏览器,文件传输等

传送大量数据、对可靠性要求不高的场景

QQ语音 QQ视频 TFTP等

记住图即可TCP、UDP和HTTP简述整理

三次握手的过程

step1:第一次握手

建立连接时,客户端发送SYN包到服务器,其中包含客户端的初始序号seq=x,并进入SYN_SENT状态,等待服务器确认。(其中,SYN=1,ACK=0,表示这是一个TCP连接请求数据报文;序号seq=x,表明传输数据时的第一个数据字节的序号是x)。

step2:第二次握手

服务器收到请求后,必须确认客户的数据包。同时自己也发送一个SYN包,即SYN+ACK包,此时服务器进入SYN_RECV状态。(其中确认报文段中,标识位SYN=1,ACK=1,表示这是一个TCP连接响应数据报文,并含服务端的初始序号seq(服务器)=y,以及服务器对客户端初始序号的确认号ack(服务器)=seq(客户端)+1=x+1)。

step3:第三次握手

客户端收到服务器的SYN+ACK包,向服务器发送一个ACK包,其中包含序列号(seq=x+1),确认号为ack(客户端)=y+1,此包发送完毕,客户端和服务器进入ESTAB_LISHED(TCP连接成功)状态,完成三次握手。 随后server和client可以传输数据了!

常见面试题:

1.为什么需要三次握手,两次不可以吗?或者四次、五次可以吗?

特殊情况,如果是两次握手,假设服务器给客户端在第二次握手时发送数据,数据从服务器发出,服务器认为连接已经建立,但在发送数据的过程中数据丢失,客户端认为连接没有建立,会进行重传。假设每次发送的数据一直在丢失,客户端一直SYN,服务器就会产生多个无效连接,占用资源,这个时候服务器可能会挂掉。这个现象就是我们听过的“SYN的洪水攻击”。

总结:第三次握手是为了防止:如果客户端迟迟没有收到服务器返回确认报文,这时会放弃连接,重新启动一条连接请求,但问题是:服务器不知道客户端没有收到,所以他会收到多连接,浪费连接开销。

---------------------------------------------------------------------------------------------------------

四次挥手过程 (客户端->服务器、服务器->客户端  形成4次挥手)

step1:第一次挥手

首先,客户端停止数据发送,并发出一个FIN用来关闭客户端到服务器的数据传送,客⼾端进⼊FIN_WAIT_1状态。然后等待服务器的确认。其中终止标志位FIN=1,序列号seq=u。

step2:第二次挥手

服务器收到这个FIN,它发送一个ACK给客户端,确认ack为收到的序号加1,服务器进⼊CLOSE_WAIT状态。

step3:第三次挥手

而后,当服务器没有数据要发送时,关闭服务器到客户端的连接,发送一个FIN给客户端,此时服务器进⼊LAST_ACK状态。

step4:第四次挥手

客户端收到FIN后,并发回一个ACK报文确认,并将确认序号seq为收到序号加1,此时客⼾端进⼊TIME_WAIT状态,等待2MSL(MSL:报⽂段最⼤⽣存时间),关闭连接。

首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。

TCP是全双⼯通信,每个⽅向都必须单独释放连接!这⼀原则是当⼀⽅完成数据发送任务后,发送⼀个FIN来终⽌这⼀⽅向的连接,收到⼀个FIN仅意味着这⼀⽅向上没有数据流动了,即不会再收到数据了(“半关闭状态”)。但在这个TCP连接上仍然能够发送数据,直到这⼀⽅向也发送了FIN。(主动发FIN就是主动方)

  1. 为什么需要2MSL时间?
    首先,MSL即是任何报文的最大生存时间,超过这个时间报文将被丢弃。

等待2MSL时间主要目的是:防止最后一个ACK包对方没有收到,(收不到确认,就无法按步骤进入CLOSED状态,无法重传),那么对方在超时后将重发第三次握手的FIN包,重新关闭。在TIME_WAIT状态时两端的端口不能使用。

3.为什么是四次挥手,而不是三次或是五次、六次?
双方关闭连接要经过双方都同意。所以,首先是客户端给服务器发送FIN,要求关闭连接,服务器收到后会发送一个ACK进行确认。服务器然后再发送一个FIN,客户端发送ACK确认,并进入TIME_WAIT状态。等待2MSL后自动关闭。

--------------------------------------------------------------------------------------------------------------

https://www.cnblogs.com/hanfanfan/p/9579771.html

https://www.cnblogs.com/williamjie/p/9390164.html

点赞
收藏
评论区
推荐文章
胖大海 胖大海
2年前
TCP/IP协议详解
TCP/IP不是一个协议,而是一个协议族的统称。里面包括IP协议、IMCP协议、TCP协议。TCP/IP协议模型,包含了一系列构成互联网基础的网络协议,是Internet的核心协议。基于TCP/IP的参考模型将协议分成四个层次,它们分别是链路层、网络层、传输层和应用层。下图表示TCP/IP模型与OSI模型各层的对照关系。1)网络接口层:主要是指物理层次
东方客主 东方客主
3年前
HTTP协议与TCP,DNS , IP 协议的关系
在TCP/IP协议族中与HTTP密不可分的有3个协议,分别是IP、TCP和DNS。下面简单介绍下这3种协议。1、IP协议        IP(InternetProtocol)网际协议位于网络层,几乎所有使用网络的系统都会用到IP协议。TCP/IP协议族中的IP指的就是网际协议,"IP"和"IP地址"是不同的,"IP"其实是一种协
Wesley13 Wesley13
3年前
TCP、UDP和HTTP关系
先来一个讲TCP、UDP和HTTP关系的http:是用于www浏览的一个协议。tcp:是机器之间建立连接用的到的一个协议。1、TCP/IP是个协议组,可分为三个层次:网络层、传输层和应用层。在网络层有IP协议、ICMP协议、ARP协议、RARP协议和BOOTP协议。在传输层中有TCP协议与UDP协议。在应用层有FTP、HTT
Wesley13 Wesley13
3年前
UDP协议报文格式
今天让我们来认识一下UDP协议的报文格式UDP协议和TCP协议同位于传输层,介于网络层(IP)和应用层之间:UDP数据部分为应用层报文,而UDP报文在IP中承载。如下图:!(https://oscimg.oschina.net/oscnet/74e201602c3a16bf23339e6347610af1f67.png)UDP报文格式
Wesley13 Wesley13
3年前
Java Socket
1\.套接字介绍套接字是介于传输层(TCP/UDP)和应用层(HTTP/FTP)之间的一个抽象,被应用程序调用;在java环境中套接字编程主要使用TCP/IP协议,但是套接字支持的协议族远不止这些;在java套接字编程中有Socket和ServerSocket两个核心类,ServerSocket位于服务器端监听连接,S
Wesley13 Wesley13
3年前
网络
文章目录深入理解TCP/IP协议1、TCP/IP协议的概念2、TCP/IP的分层管理1\.物理层2\.数据链路层MAC地址广播3\.网络层IP协议4\.传输层UDP协议TCP协议5\.应用层(会
Stella981 Stella981
3年前
Socket编程(网络协议一)
“我们在传输数据时,可以只使用(传输层)TCP/IP协议,但是那样的话,如果没有应用层,便无法识别数据内容“TCP/IP只是一个协议栈,就像程序运行一样,必须要实现运行,同时还要提供对外的操作接口网络从下往上分为  物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。IP协议对应于网络层,TCP协议对应于传输层,而HTTP协议对应于应用层,
Wesley13 Wesley13
3年前
TCP、UDP和HTTP区别详解
http:是用于www浏览的一个协议。tcp:是机器之间建立连接用的到的一个协议。1、TCP/IP是个协议组,可分为三个层次:网络层、传输层和应用层。在网络层有IP协议、ICMP协议、ARP协议、RARP协议和BOOTP协议。在传输层中有TCP协议与UDP协议。在应用层有FTP、HTTP、TELNET、SMTP、DNS等协议。
Wesley13 Wesley13
3年前
TCP与UDP与HTTP协议
http:是用于www浏览的一个协议。tcp:是机器之间建立连接用的到的一个协议。1、TCP/IP是个协议组,可分为三个层次:网络层、传输层和应用层。在网络层有IP协议、ICMP协议、ARP协议、RARP协议和BOOTP协议。在传输层中有TCP协议与UDP协议。在应用层有FTP、HTTP、TELNET、SMTP、DNS等协议。
专注IP定位 专注IP定位
2年前
TCP/IP协议常见漏洞类型
摘要:TCP/IP由网络层的IP协议和传输层的TCP协议组成。常见的漏洞类型包括ARP病毒攻击、基于RIP的攻击、DNS欺骗、TCP连接欺骗。TCP/IP是TransmissionControlProtocol/InternetProtocol的简写,中译名为传输控制协议/因特网互联协议,又名网络通讯协议,是lnternet最基本的协议、Intera