美文网首页
1、这么多设备向服务器发请求,服务器怎么知道某个响应结果应该回传

1、这么多设备向服务器发请求,服务器怎么知道某个响应结果应该回传

作者: 朴裕识 | 来源:发表于2017-02-09 18:11 被阅读0次

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

    那具体是怎么知道的呢?

    1.源和目标之间发送的是数据包,是一段数据流。
    2.这个IP包有自己的数据结构,如下:


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

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


    转载自http://www.51testing.com/html/66/138366-216709.html

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


    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 给服务端
    转载自https://objccn.io/issue-10-6/

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

    相关文章

      网友评论

          本文标题:1、这么多设备向服务器发请求,服务器怎么知道某个响应结果应该回传

          本文链接:https://www.haomeiwen.com/subject/sjrwittx.html