今天宏观的说一说网络传输的流程
我在浏览器上输入baidu.com到底会发生什么?
总的来说是这样的
- 浏览器查找域名的IP地址(DNS服务器)
- 封装好HTTP数据报
- TCP三次握手建立连接(商议MSS最长报文长度MSS=MTU-网络层-传输层)
- 添加TCP/UDP头部(端口号80),发送HTTP数据(看情况决定要不要分段)
- 添加IP协议头部,通过网络层管理地址、选择路径
- 通过ARP查询IP地址对应的MAC地址
- 添加以太网协议头部,链路层传输数据
- 到服务器后一层一层解析协议头,拿到真实数据并处理
- 接着通过刚才的方式,一层一层加协议头、发送响应报文给浏览器。
1.域名解析
不管是网络层还是链路层(ARP转换),都得用的IP地址进行下一步传输。
这时候可以使用DNS解析IP地址。
- 浏览器会先从主机的Hosts文件中查看是否有百度域名和IP地址的映射
- 如果Hosts文件没有,浏览器会查看自己的缓存
- 如果都没有,就请求DNS服务器来获取IP地址
2.建立连接、发送数据
- 发送HTTP请求报文前要先发送一个HTTPS报文建立一个安全信道,并且确定网站的真实性。
- 建立TCP连接。
- 加上TCP的头部,发送真正的HTTP报文。(主要加HTTP的端口号)
3.寻找地址
- 把包封装好交给路由器,接下来是网络层的工作了
- 路由器在转发IP包时,首先确定目的IP地址,再查路由表。
- 如果查到了,直接转发给目标主机对应的接口。如果没查到就走缺省路由地址(一般是上一层路由地址),继续重复2、3步。
这里有一点就是,如果跨局域网了,那会使用NET技术,发送的时候每次把源IP地址换成公网IP。返回的时候,根据公网IP的记录表给到对应的主机。(这张表在三次握手时创建、FIN确认应答后删除对应记录)
4.ARP得到MAC地址
现在到目的主机的路已经选好了,传输也有TCP保证可靠性。
就差链路层在设备之间对数据的传输协议了。
在链路层,什么IP和域名都不管用,它关注的是设备,而能唯一区分设备的,就是MAC地址。(但但但……还是需要IP地址的哈……)
所以用到了IP转MAC的ARP协议。
- 通过广播发送一个ARP请求包到同一链路的每个主机上(包中有想要知道的IP地址)
- 每个主机收到广播,解析包中IP,若有和自己IP一致的,就把自己的MAC地址打包进ARP响应包中,发回去。如果没有直接丢弃。
顺便提一嘴RARP,看名字也知道是干嘛的。
在有接口的设备(比如主机),就可以使用DHCP动态分配IP(其实也是解决了IP数量问题)。但是没有接口的话就得利用RARP服务器,“问”服务器我MAC地址对应的IP应该是什么?
5.物理层转为01二进制光电信号
……
基本上就这样了……
还是那句话,如有错误请评论赐教!谢谢~~