内容简介:TCP是传输层的协议,UDP也是传输层的协议,IP是网络层的协议。IP:是用来找到目标计算机。如A向B发送数据,那么要找到对方B的计算机,找到后就确定了网络间的通道,A - B。也就是说IP是来确定网络间的路径的。TCP:是用来实现通信的,它是一个全双工的协议(后面会说明)。在IP实现了网络间路径后,TCP提供了这个路径的全双工通信的能力。这个链接的建立要经历三次握手,断开链接要四次挥手(后面会说明)。
TCP是传输层的协议,UDP也是传输层的协议,IP是网络层的协议。
IP:是用来找到目标计算机。如A向B发送数据,那么要找到对方B的计算机,找到后就确定了网络间的通道,A - B。也就是说IP是来确定网络间的路径的。
TCP:是用来实现通信的,它是一个全双工的协议(后面会说明)。在IP实现了网络间路径后,TCP提供了这个路径的全双工通信的能力。这个链接的建立要经历三次握手,断开链接要四次挥手(后面会说明)。
UDP: 是和TCP相似的,也是提供了通信能力。不过和TCP有区别。TCP是点对点的通讯,UDP支持一对多,多对一,一对一等。UDP不需要链接,直接发数据,相对来说速度更快,但是不保证数据一定会到达,适合广播。
全双工半双工与单工
全双工: 表示A可以给B发送数据的同时,B也可以给A发送数据。
半双工:表示A给B发送数据的时候,B不能给A发送数据。当B给A发送数据的时候,A不能给B发送数据。
单工: 表示要么是A只可以给B发送数据,或者B只能给A发送数据。数据是单向发送的不是双向的。
TCP三次握手
TCP建立连接需要三次握手,断开链接需要四次挥手。以下例子中A为客户端,B为服务器,来说明三次握手与四次挥手过程。
注意:TCP是一个全双工的协议,所以下边建立连接时候SYN=1发送两遍,A要向B建立连接发送SYN=1。B也要向A建立连接也要发送SYN=1。同理四次挥手时候也要发送两遍FIN=1。
第一次握手: 客户端A发送SYN=1(代表要向B建立连接),seq=a(A发送数据的一个序列号)到服务器。
第二次握手:服务器B收到数据后,向客户端A发送ACK=1(代表应答收到),SYN=1(代表要向A建立连接),seq=b(B发送数据的一个序列号),ack=a+1(等于收到数据时候的seq+1,代表确认码)。
第三次握手:客户端A收到数据后先看下ack是不是上次发的seq+1=a+1。确保没问题后会向服务器B发送ACK=1(代表应答收到),seq=a+1(A发送数据的下一个序列号),ack=b+1(等于收到数据时候的seq+1,代表确认码)。
TCP四次挥手
第一次挥手: 客户端A向服务器B发送FIN=1(A请求断开服务器连接),seq=a(本次数据序列号)。
第二次挥手:服务器B向客户端A发送ACK=1(应答,收到数据)seq=a+1(代表还有数据没发送)。
第三次挥手:服务器向客户端A发送FIN=1(服务器要断开A的链接),seq=b(本次数据的序列号),ack=a+1(确认码,代表没有数据要发送了)。
第四次挥手:客户端A验证收到的ack是不是等于a+1,确保B没有数据在发送了。然后发送给服务器B,ACK(应答),seq=a+1(本次数据序列号)。
Http
http是应用层的协议,它实现了怎么发数据和怎么收数据,定义了收发的格式,同时定义了是短连接。当一次传输数据结束就断开链接。
特点
- 只能客户端主动发出请求,服务器被动响应。服务器没办法主动给客户端发数据。
- 是个短连接,当一次链接数据传送完毕后,就会断开链接。
请求
-
请求行
说明了是get方法,还是post方法等等,说明了协议版本http 1.1等,get方法会有URL。这里get方法参数往往要求ASCII码,也就是不能有中文,并且还有长度限制,post没有。其实这里往往是浏览器等作出的限制,而不是post的请求行中就不能放参数。
-
请求头
包含了User-Agent:浏览器类型,请求数据的来源。 Accept:可以接收的数据类型,这里要和服务器的Content-Type匹配。服务器发送的类型和客户端可以接收的类型要一致。 Accept-Encoding,Accept-Language等等。 Content-Type:发送内容的类型,往往post方法才会有,因为post方法的参数是在请求体里。 请求头部也可以自己添加新字段,比如常见的添加token,userId等。
-
空行
-
请求体
一般只有post方法请求体中才会有数据。
响应
-
状态行
包含协议以及协议的版本,状态码。
1.xxx: 刚开始接收到数据。
2.xxx: 已经接收到数据,可以解析数据。
3.xxx: 重定向。
4.xxx: 客户端的错误。
5.xxx: 服务端错误。
这些都是http的状态码,其实还要后台自己定义的错误码,和这里的状态码不一样。
-
响应报头
Date: 接收到请求的日期时间。
Content-Type: 响应的数据类型。
Content-Length: 响应数据的内容长度。
-
空行
-
响应报文
常见的是返回了html网页内容,或者返回了json数据。
Http请求过程
- 首先客户端发送http请求连接服务器,tcp协议三次握手建立连接。
- 客户端开始发送请求数据,服务器例如 java 会在线程池里拿出来一个线程来接收这次http的请求。
- 服务器拿到请求后进行资源查找,之后会返回数据给客户端,这个过程就是相应。
- 客户端拿到服务器返回的数据后保存处理,进行四次挥手断开http链接。 这时候java的那个处理请求的线程将会放回java线程池,等待下次请求。
socket
socket是套接字,是对TCP/IP的封装。它对数据传输的两者提供了一个全双工的管道。
它和http一样,传输数据前要经历三次握手链接也要经历四次挥手断开链接。和http协议的区别在于,socket是一个长链接。http是短连接。socket虽然是长链接,但是由于网络等原因也有可能会断开链接。所以往往会提供一个心跳包,每隔一段时间向服务器发送一个规定好的心跳,如果某一个时间发送没有收到心跳,那代表已经断开链接了。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- java反射原理, 注解原理
- Webpack 原理(二):加载原理
- Docker原理之 - CGroup实现原理
- 【Vue原理】响应式原理 - 白话版
- Docker实现原理之 - OverlayFS实现原理
- UAV MOF工作原理之Agent注入机制原理
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。