服务器如何响应多个请求,1、这么多设备向服务器发请求,服务器怎么知道某个响应结果应该回传给我的设备,而不是你的设备?...

首先,一般的HTTP协议的请求,都是在TCP的3次握手之后再进行数据传输的。在这3次握手之后就已经“建立起了连接”。可以说在3次握手的时候就已经确定了源和目标的ip+端口(如果是IPv4 Internet Protocol version 4的话)。

那具体是怎么知道的呢?

1.源和目标之间发送的是数据包,是一段数据流。

2.这个IP包有自己的数据结构,如下:

8659c0c5cf05

*转载自http://blog.csdn.net/ns_code/article/details/29382883 *

3.而其中IP头部的数据结构如下:

8659c0c5cf05

4.TCP头部的数据结构如下:

8659c0c5cf05

5.可以看到,IP头部结构中的Source Address和Destination Address,长度为32bit(最多可表示256的4次方),即源和目标的IP地址。

6.TCP头部结构中的源端口号和目的端口号,就标识了客户端和服务器中具体的某一个进程。

有了这些数据就能唯一确定源和目标,这样服务器的结果就能只响应给我,而不是响应给你。

另外,我们常说的“3次握手之后就建立起了连接,就能传数据了”,这个“建立起了连接”是啥意思?

“建立起了连接”是个笼统的说法,更准确的版本是“建立起了传输数据的环境”或者说“接收方和发送方,都知道自己要向什么地方发送数据,而且能够保证自己所得到的数据,就是发送方发的数据”。

这个环境至少需要两个条件:

源和目标的IP+端口号

源和目标双方都确认了起始序列号

第一点其实就是上面说的,第二点是这样:

首先

TCP 会通过三次握手来完成连接建立,具体过程是这样的:

1.客户端首先向服务端发送一个 SYN 包和一个随机序列号 A

2.服务端收到后会回复客户端一个 SYN-ACK 包以及一个确认号(用于确认收到 SYN)A+1,同时再发送一个随机序列号 B

3.客户端收到后会发送一个 ACK 包以及确认号(用于确认收到 SYN-ACK)B+1 和序列号 A+1 给服务端

有了这些序列号,源和目标才能够保证数据的有效性,也就是我们说的“建立起了连接”

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值