Python进阶之网络通信过程再现

一、通信过程(pc+switch+router+server),示意图如下(下图是已经配置好,需要配置的PC:IP、NETMASK、DFGATEWAY,DNSROUTER:IPNETMASK路,也就是图中画圈的)

Python进阶之网络通信过程再现

注意几个重要的名词:

        mac地址:在两个通信设备的通信过程中,标记数据实际的被转发所经过的地址
        IP地址:在两个通信设备通信过程中,标记数据的逻辑地址,即两个设备的地址。相当于长跑比赛的起点和终点
        netMark:和IP地址一起确定网络号
        默认网关:发送的ip不同在一个网段内,那么会把这个数据转发给默认网关

访问网站的实际过程(以访问baidu.com为例):
    1、首先需要解析网址对应的IP地址:
        通过使用arp协议发包,获取默认网关的mac地址
        组织数据发送给默认网关(IP还是DNS服务器的IP,但是mac地址是默认网关的MAC地址,)
        默认网关拥有装发数据的能力,把数据转发给路由器
        路由器根据自己的路由协议,来选择一个合适的较快的路径转发给数据所指向的目的网关
        目的网关(DNS服务器所在的网关),把数据转发给DNS服务器
        DNS服务器查询并解析出baidu.com对应的IP地址,并将它原路返回给请求这个域名的client
    2、得到baidu.com对应的IP地址后,会发送TCP的3次握手,进行连接
    3、使用http洗衣发送请求数据给web服务器
    4、web服务器接受到数据请求之后,通过查询自己的服务器来得到相应的结果,并且原路范返回给浏览器
    5、浏览器接收到数据后,同弩弓浏览器自己的网页渲染功能来显示这个网页
    6、浏览器关闭tcp连接,即4次挥手
至此完成整个访问过程!


          在上面的访问过程中还提到了3次握手和4次挥手,3次握手是建立连接进行数据传输的前一个动作,当客户端想要访问某服务器时,客户端就会向服务器发送一个请求,在这个请求数据包中包含一个握手信号SYN,当服务器接手后会将其中的变量进行+1操作,完成第一次握手,随后,服务器会同样会向终端发送一个数据包,其中包含一个之前握手包的确认信号,和另外一个握手信号,当客户端接收到这数据包后,解析发现之前的确认信已完成,并对服务器发来的握手信号进行+1操作,完成第二次握手,完成后在想服务器发送第服务器握手信号确认信号服务器接受后完成第三次握手,至此,完成三次握手,示意图如下:

Python进阶之网络通信过程再现

4次握手信号和三次握手信号原理基本相同,只是不同的是目的不同,最开始客户端关闭socket对象,向服务器发送关闭信号,服务器确认后发送确认包,并向客户端发送一个关闭socket(和上一个socket不一样,这个是服务器端的)的信号,客户端确认后反馈一个确认包,至此4次挥手完成,下面是整个通信过程的示意图:

Python进阶之网络通信过程再现

         TCP在真正的读写操作之前,server与client之间必须建⽴⼀个连接,当读写操作完成后,双⽅不再需要这个连接时它们可以释放这个连接,连接的建⽴通过三次握⼿,释放则需要四次握⼿,所以说每个连接的建⽴都是需要资源消耗和时间消耗的

         另外补充一点,在数据通信传输过程中包括两种类型,短链接和长连接,前者一般用于小量数据的传送,后者一般用于类似大型游戏和视频之类的。

         短连接TCP模拟过程(建⽴连接——数据传输——关闭连接...建⽴连接——数据传输——关闭):
               1. client 向 server 发起连接请求
               2. server 接到请求,双⽅建⽴连接
               3. client 向 server 发送消息
               4. server 回应 client
               5. ⼀次读写完成,此时双⽅任何⼀个都可以发起 close 操作

          在第 步骤5中,⼀般都是 client 先发起 close 操作。当然也不排除有特殊的情况。从上⾯的描述看,短连接⼀般只会在 client/server 间传递⼀次读写操作

Python进阶之网络通信过程再现


             长连接TCP模拟情况(建⽴连接——数据传输...(保持连接)...数据传输——关闭连接):
                     1. client 向 server 发起连接
                     2. server 接到请求,双⽅建⽴连接
                     3. client 向 server 发送消息
                     4. server 回应 client
                     5. ⼀次读写完成,连接不关闭
                     6. 后续读写操作...
                     7. ⻓时间操作之后client发起关闭请求

Python进阶之网络通信过程再现