Http,Socket,Tcp,Udp,Ip原理区别

栏目: 后端 · 前端 · 发布时间: 7年前

内容简介: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,代表确认码)。

Http,Socket,Tcp,Udp,Ip原理区别

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,Socket,Tcp,Udp,Ip原理区别

Http

http是应用层的协议,它实现了怎么发数据和怎么收数据,定义了收发的格式,同时定义了是短连接。当一次传输数据结束就断开链接。

特点

  1. 只能客户端主动发出请求,服务器被动响应。服务器没办法主动给客户端发数据。
  2. 是个短连接,当一次链接数据传送完毕后,就会断开链接。

请求

  1. 请求行

    说明了是get方法,还是post方法等等,说明了协议版本http 1.1等,get方法会有URL。这里get方法参数往往要求ASCII码,也就是不能有中文,并且还有长度限制,post没有。其实这里往往是浏览器等作出的限制,而不是post的请求行中就不能放参数。

  2. 请求头

    包含了User-Agent:浏览器类型,请求数据的来源。 Accept:可以接收的数据类型,这里要和服务器的Content-Type匹配。服务器发送的类型和客户端可以接收的类型要一致。 Accept-Encoding,Accept-Language等等。 Content-Type:发送内容的类型,往往post方法才会有,因为post方法的参数是在请求体里。 请求头部也可以自己添加新字段,比如常见的添加token,userId等。

  3. 空行

  4. 请求体

    一般只有post方法请求体中才会有数据。

响应

  1. 状态行

    包含协议以及协议的版本,状态码。

    1.xxx: 刚开始接收到数据。

    2.xxx: 已经接收到数据,可以解析数据。

    3.xxx: 重定向。

    4.xxx: 客户端的错误。

    5.xxx: 服务端错误。

    这些都是http的状态码,其实还要后台自己定义的错误码,和这里的状态码不一样。

  2. 响应报头

    Date: 接收到请求的日期时间。

    Content-Type: 响应的数据类型。

    Content-Length: 响应数据的内容长度。

  3. 空行

  4. 响应报文

    常见的是返回了html网页内容,或者返回了json数据。

Http请求过程

  1. 首先客户端发送http请求连接服务器,tcp协议三次握手建立连接。
  2. 客户端开始发送请求数据,服务器例如 java 会在线程池里拿出来一个线程来接收这次http的请求。
  3. 服务器拿到请求后进行资源查找,之后会返回数据给客户端,这个过程就是相应。
  4. 客户端拿到服务器返回的数据后保存处理,进行四次挥手断开http链接。 这时候java的那个处理请求的线程将会放回java线程池,等待下次请求。

socket

socket是套接字,是对TCP/IP的封装。它对数据传输的两者提供了一个全双工的管道。

它和http一样,传输数据前要经历三次握手链接也要经历四次挥手断开链接。和http协议的区别在于,socket是一个长链接。http是短连接。socket虽然是长链接,但是由于网络等原因也有可能会断开链接。所以往往会提供一个心跳包,每隔一段时间向服务器发送一个规定好的心跳,如果某一个时间发送没有收到心跳,那代表已经断开链接了。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。

Distributed Algorithms

Distributed Algorithms

Wan Fokkink / The MIT Press / 2013-12-6 / USD 40.00

This book offers students and researchers a guide to distributed algorithms that emphasizes examples and exercises rather than the intricacies of mathematical models. It avoids mathematical argumentat......一起来看看 《Distributed Algorithms》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

MD5 加密
MD5 加密

MD5 加密工具

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具