UC头条:[网络原理]一个数据包从发送到接收在网络中经历了那些过程(详细分析)
一个数据包从发送到接收在网络中经历了那些过程
假设学生给老师发送电子邮件,内容为:“老师您好!”。从计算机A向另一台计算机B发送电子邮件,站在网络原理的角度来分析整个过程。
启动应用程序新建邮件,将收件人邮箱和邮件内容填写好,应用程序进行编码处理。(应用层)
应用在发送邮件那一刻建立TCP连接(三次握手),将数据交给传输层。
第一次握手:建立连接时,主机A向主机A发送请求报文
第二次握手:主机B收到请求报文后,如同意连接,则向主机A发送确认报文
第三次握手,主机A收到主机B的确认后,再次向主机B给出确认报文,完成连接
TCP 就会把这个数据构成一个TCP数据报(附加上TCP首部包括源端口号和目标端口号(用以识别发送主机跟接收主机上的应用)、序号(标明发送的包那部分是数据)以及校验和(判断数据是否被更改)),然后将该数据报交给IP协议(网络层)。
IP协议就会构造一个IP数据报(IP会将TCP传过来的数据报当作自己的数据,加上IP首部包含接收端IP地址以及发送端的IP地址),此处要根据数据报的长度,以及MTU的限制,考虑是否进行分包,查路由表决定从哪一个端口转发,将数据交给数据链路层;
数据链路层将数据构造一个以太网数据帧,其中以太网首部包含接收端MAC地址、发送端MAC地址以及标志以太网类型的以太网数据的协议。源mac就是本机mac,目的mac根据上面IP确定的转发端口来决定(基于mac学习完成,ARP查找)
数据报的结构:
点击加载图片
数据到达物理层,物理层将数据报转换成光电信号或者电信号进行传输;
首先传输到下一台路由器上,路由器进行解析和分用(解析到传输层)NAT 路由选择 ,继续查路由表,把数据再次封装的,往下一个路由器设备上转发(在这里封装和分用和上边是一样的)
中间会经过若干个路由器转发的过程,最终到达目的服务器;
服务器就会进行分用。物理层把光电信号转成二进制bit流,交给数据链路层;
数据链路层从以太网数据报的首部找到MAC地址判断是否为发给自己的包,如果不是发给自己的数据则丢掉。如果是就解析出其中的IP数据报交给网络层,但是如果是无法识别的协议类型也会丢掉。
网络层收到数据报,同样进行解析判断自己是不是首部中的目标IP,如果是则接收数据包并查找上一层的协议类型,如果是TCP就交给TCP处理如果是UDP就交给UDP处理。网络层可能需要组包(取决于第4步是否分包),组包后将数据交给传输层;
传输层TCP收到数据,首先计算校验和保证数据的完整性,然后按照序号检查接收数据,检查端口号确定具体的应用程序 ,将解析出的应用层数据,交给应用程序,返回ACK(确认序号、窗口大小、延时应答、捎带应答)在这里ACK也是一个TCP数据报,也会涉及到一系列的封装和分用过程,如果没有收到ACK就会反复发送。
服务器的应用程序读取数据,解析数据获知邮件的收件人信息以及邮件内容。(应用层)
主机B给发送端返回一个回执信息。
断开连接(四次挥手)
第一次挥手:主机A想分手,发送消息给主机B
第二次挥手:主机B通知主机A已经接受到分手请求,但还没做好分手准备
第三次回收:主机B已经做好分手准备,通知主机A
第四次挥手:主机A发送消息给主机B,确定分手,主机B关闭连接
基本上就是这样一个过程,我在慢慢在细化每一个过程。
参考文献
[图解HTTP读书笔记]第一章:了解Web及网络基础
[图解HTTP读书笔记]第二章:简单的HTTP协议
[图解HTTP读书笔记]第三章:HTTP报文内的HTTP信息
[图解HTTP读书笔记]第四章:返回结果的HTTP状态码
[图解HTTP读书笔记]第五章:与HTTP协作的Web服务器
[图解HTTP读书笔记]第六章:HTTP首部
[图解HTTP读书笔记]第七章:确保Web安全的HTTPS
[图解HTTP读书笔记]第八章:Session 和 Cookie工作原理
[图解TCP_IP读书笔记]第一章:网络基础知识
[图解TCP_IP读书笔记]第二章:TCP/IP 基础知识