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

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

内容简介: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虽然是长链接,但是由于网络等原因也有可能会断开链接。所以往往会提供一个心跳包,每隔一段时间向服务器发送一个规定好的心跳,如果某一个时间发送没有收到心跳,那代表已经断开链接了。


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

查看所有标签

猜你喜欢:

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

七周七并发模型

七周七并发模型

Paul Butcher / 黄炎 / 人民邮电出版社 / 2015-3 / 49.00元

借助Java、Go等多种语言的特长,深度剖析所有主流并发编程模型 基于锁和线程的并发模型是目前最常用的一种并发模型,但是并发编程模型不仅仅只有这一种,本书几乎涵盖了目前所有的并发编程模型。了解和熟悉各种并发编程模型,在解决并发问题时会有更多思路。 ——方腾飞,并发编程网站长 当看到这本书的目录时,我就为之一振。它涉及了当今所有的主流并发编程模型(当然也包括Go语言及其实现的CSP......一起来看看 《七周七并发模型》 这本书的介绍吧!

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

html转js在线工具
html转js在线工具

html转js在线工具