美文网首页
输入一个网址后

输入一个网址后

作者: 杨剑锋 | 来源:发表于2020-11-03 11:12 被阅读0次

    我们先来看看一个网址由什么组成:

    http/https   +   ://  + web.com/cn/net...  +/ + 目录名  + / + ... + 文件名
    

    所以其实一个网址是可以拿到一个远程计算机的某个文件资源的一个地址。当然这也需要一个解析才能拿到真正的地址位置,这个时候,就需要dns出场了。

    dns的作用就是根据域名来获取真正的ip地址。我们从网址可以看到,域名都是用句号来分隔开的,这里的句号隔开的代表的就是不同层级的界限,越后面层级也就越高。一般来说,有根域,com/cn/net之类的顶级域dns服务器,具体到baidu.com,google.com之类的权威dns服务器,呈树状的,然后一层层往下可以遍历。

    而浏览器所在的客户端,先是从本地dns服务器看看缓存里面有没有,有就直接找到ip地址的了。没有就到根域,然后就可以一层一层玩下找到匹配的域名,获得ip地址。拿到了ip地址,浏览器通过调用系统socket库等方法委托协议栈工作,这个时候数据就到了传输层的tcp(http,http1.1,http 2)/udp(http3)这里。

    目前的http一般都是基于tcp的,所以简历连接前,先要进行三次握手


    image.png

    服务器处于listen状态,客户端发起连接请求syn,然后状态变为syn-send。

    服务器收到syn,返回一个ack以及一个syn,并把状态变更为syn-recv。从这里服务器可以确定客户端的发送和服务器的接收功能没问题,现在服务器还需要确认客户端的接收以及服务器自身的发送有没有问题。

    客户端收到服务器的syn和ack,状态变为establish,然后发一个ack到服务器。这里客户端可以确定服务器的发送和接收能力没问题,客户端自己的发送接收也正常,所以状态为建立连接。现在要做的就是让服务器知道客户端的接收和服务器的发送没问题,所以需要再给一个ack给服务器。

    服务器收到ack,全双工都正常确定了,所以也变成establish。所以三握的根本目的就是确保双方确定对方和自己都能正常收发。

    建立连接后就开始进行正常数据收发了,但是如果数据比较大,加上tcp包头和ip头部的数据超过了MTU(一个网络包的最大长度,一般是1500字节)那么tcp会进行切割,切割后的数据加上包头,一个个包进行传输。
    每个包加上tcp包头,到ip层,加ip包头,也就是源地址ip和目标地址ip还有协议号06(tcp)到mac层。
    mac层通过arp查询到对方的mac地址,加上发送方的mac地址组成mac包头。之后就是调用网卡驱动程序驱动网卡,最后会转换为电信号顺着网线发送出去。发送到交换机再转成数字信号,再到路由器。路由器和交换机的区别是路由器带mac地址。
    到对方服务器就是一层一层包头,然后解析得到需要的信息。

    解析后,服务器逻辑根据请求进行相应的业务处理,返回发送数据,流程和刚刚一样。最后进行四次挥手断开连接。

    相关文章

      网友评论

          本文标题:输入一个网址后

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