Note4:网络编程之网络通信过程

一,两台电脑之间的通信

    两台电脑想完成通信,用网线连接两台电脑,再配置两台电脑的ip地址在同一个网段内就可以了。



二,通过hub实现三台电脑之间的通信

    三台电脑想要通信可以通过集线器来通信,但也只是在一个局域网内。如图:

           Note4:网络编程之网络通信过程

    那通过集线器连接有什么特点呢?

    每个数据包的发送都是以广播的形式进行的,容易阻塞网络。

    现在我们用PC0来ping一下PC2,里面的交互是如何进行的呢?

    1.第一次ping 它由于不知道192.168.1.3的MAC地址,所以PC0会先发一个arp报文传给Hub。

    2.然后Hub以广播的形式发送给连接它的所有电脑,非192.168.1.3的电脑会丢弃这个arp报文。而192.168.1.3的电脑却不会。

    3.ip为192.168.1.3的电脑接到这个报文后,会返回一个arp报文先传给hub,里面有它的MAC地址。

    4.hub又以广播的形式传给所有电脑。非192.168.1.1的电脑会丢弃。

    5.ip为192.168.1.1的电脑接到这个报文,就知道了192.168.1.3的MAC地址。然后会发一个ICMP报文,先传给HUB

    6.hub接到后又以广播的形式传给所有电脑,非192.168.1.3的主机接到ICMP报文会丢弃。

    7.192.168.1.3接到后会返回一个ICMP报文给192.168.1.1,这样就代表Ping通了,然后进行三次来回。当然,其中只要传到了HUB的位置,hub都会广播的形式发送。这也是为什么hub会阻塞网络的原因。

    


三,通过交换机连接三台电脑

    交换机的特点:

    转发过滤:当一个数据帧的目的地址在MAC地址表中有映射时,它被转发到连接目的节点的端口而不是所有端口(如该数据帧为广播帧则转发到所有端口)

    学习功能:以太网交换机了解每个端口相连设备的MAC地址,并将地址同相应的端口映射起来存放在交换机缓存中的MAC地址表中。

                                Note4:网络编程之网络通信过程


    当192.168.2.1要ping192.168.2.3时,所进行的交互:

    1.第一次ping 它由于不知道192.168.2.3的MAC地址,所以192.168.2.1会先发一个arp报文传给交换机。

    2.然后交换机以广播的形式发送给连接它的所有电脑,同时在arp缓存表中记录192.168.2.1的映射MAC地址。非192.168.2.3的电脑会丢弃这个arp报文。而192.168.2.3的电脑却不会。

    3.ip为192.168.2.3的电脑接到这个报文后,会返回一个arp报文(里面有它的MAC地址)先传给交换机,交换机中的arp缓存表里记录192.168.2.3的映射MAC地址。

    4.交换机根据映射192.168.2.1的MAC地址,直接将报文传给192.168.2.1。

    5.ip为192.168.2.1的电脑接到这个报文,就知道了192.168.2.3的MAC地址。然后会发一个ICMP报文,先传给交换机。

    6.交换机接到后根据192.168.2.3的映射MAC地址,直接传给192.168.2.3。

    7.192.168.2.3接到后会返回一个ICMP报文给192.168.2.1,这样就代表Ping通了,然后进行三次来回。


    总结:

    1.hub传数据都会以广播的形式发送,而交换机会有一个映射表找到ip对应的MAC地址而单独发送目的地。所以说交换机有学习的能力。

    2.arp协议是通过IP获取MAC地址。先发一个广播,目的主机接到这个报文后,就会立即作出回应,返回给源主机。这样就知道了对方的MAC地址。



四,利用路由器连接两个不同网段的电脑

    想要连接两个不同网段的电脑,用集线器和交换机是无法做的的。但可以用路由器做到。首先路由它是怎么做到的呢?我们知道,只有在同一个网段内的电脑才能通信,而想要实现两个不同的网段之间的通信,那么路由本身则应该至少具备两个网卡,如图,左边的网卡为192.168.1.1右边的网卡为192.168.2.1。左右两边均可以和各自网段内的电脑通信。而两块网卡在一个设备上,这样就实现了两个网段的通信。这也是就是实现了与外网的通信。

Note4:网络编程之网络通信过程

    那具体是怎么实现通信的呢?当192.168.1.2要ping192.168.2.2的时候,首先192.168.1.2发现这个ip与它不在同一个网段内,于是就把它交给了它的默认网关192.168.1.1。所在在给PC0配置的时候,一定要给它配置一个默认网关,才能与外界通信。同样的,192.168.2.2也要配置默认网关,才能将数据包发送到另一个网段去。

    默认网关的作用:想要与外网通信,必须先把报文交给默认网关,它起一个监督的作用。就好像你是一个小孩,你想去同学家玩,必须由父母把关。

    


五,通信综合:浏览一个百度网址,具体发生的过程。

    Note4:网络编程之网络通信过程


    假设已经全部配置好。192.168.1.2具体浏览百度的过程如下:

    1.首先要解析出www.baidu.com的ip地址:

        a.先要知道默认网关的MAC地址:使用arp协议获取默认网关的MAC地址

        b.组织数据发送给默认网关

        c.默认网关具有转发数据的能力,将数据转给路由器

        d.路由器根据自己的路由协议,选择一条合适的路转发数据给目的默认网关

        e.目的默认网关将数据转发给DNS服务器,DNS服务器解析出百度的ip。再将数据原路返回给请求的client

    2.得到www.baidu.com的ip后,首先会发送TCP三次握手,然后连接

    3.使用HTPTP协议发送请求数据给目的web服务器

    4.web服务器得到请求后,通过查询自己的服务器,得到相应的数据原路返回给请求的浏览器

    5.浏览器接到数据后会通过渲染功能显示网页

    6.浏览器关闭连接,即TCP四次挥手。



六,TCP通信与UDP通信比较

    Note4:网络编程之网络通信过程

    TCP:

    1.客户端发送一个类型发syn的报文给sever

    2.server发送syn+ack类型的报文给client

    3.然后client再发送一个ack确认给server.即完成一个TCP三次握手连接

    4.连接后,每当client发送一个数据给server时,server都会发送一个确认ACK给客户端。这也是为什么TCP较稳定的原因

    UDP:

    当client连接上server时,直接会发送数据,不会有确认信息。UDP通信可比作寄信给某人。



七,TCP的十种状态

    Note4:网络编程之网络通信过程


八,TCP的2MSL的问题

    MSL(Maximum Segment Lifetime)报文最长存活时间

    Note4:网络编程之网络通信过程

    client在TIME-WAIT的状态时会等待2MSL的时间,大概2-4分钟才会关闭套接字。为什么不直接关闭呢?我们知道TCP连接是稳定的,每次发送数据的时候,都会收到对方的ACK确认信息。但是难免最后一次发不能确保对方能否收到。在最后一次,client向server发送了一个ACK信息,假如server没有收到怎么办呢。于是client就会等待2MSL的时间再关闭。为什么呢,因为client发送一个ACK给server的最长时间是MSL,假如server没有收到ACK信息,它会重新发送一个FIN给client,这经过的最长时间又是MSL,所以client就等待2MSL的时间,在这期间,若没有收到FIN包,就代表server已经收到刚才发的ACK信息了。