仔细拜读了深入浅出 TCP/IP 协议 很好的深入浅出,虽然内容稍稍多一些,但细且易懂。
做这个归纳是为了:
- 将看到的知识转变为自己的知识,加深印象。
- 过程中遇到疑惑的地方,在归纳的过程中进行补充说明。
先根据这张图从上到下做一下各层的总结
1.应用层:定义了许多应用层协议,来对字节流的这种难以操作的数据格式做了格式规范。
2.传输层:定义了具体的端口,明确了这次请求的源机器/目标机器上的具体应用程序。
3.网络层:定义了IP地址,明确了这次请求的源/目标机器所在的网段。
4.链路层:定义了Mac地址,明确了具体是网段的哪台机器。
其中IP和Port是由应用层传下来的,Mac地址是由网络层中的ARP协议负责找出来的。
较为细节的部分我们从下层往上讲更容易引发我们的思考。
1.链路层
在子网中广播的方式发送数据,子网中的每个主机都能收到广播,根据以太网数据包中的mac地址来判断这个数据包是不是发给自己的,如果不是则丢弃这个包。
- 需要的信息:目标的Mac地址(ARP协议提供),目标所在子网(IP协议,路由协议提供)
- 数据包:把上层提供的数据包包装成以太网数据包(首部,数据,尾部)
首部:首部固定为14个字节,包含了目标MAC地址、源MAC地址和类型
数据:最短为46个字节,最长为1500个字节,如果需要传输的数据很长,就必须分 割成多个帧进行发送;
尾部:固定为4个字节,表示数据帧校验序列,用于确定数据包在传输过程中是否损坏。
2.网络层
- 需要的信息:IP(应用层提供)
- 数据包: 把上层提供的数据包包装成IP数据包, Mac地址
为了提供mac地址需要用到IP协议,ARP协议,路由协议。
(1)IP协议:需要ip地址(应用层传入),来判断源机器和目标机器是否属于同一个子网。
(2)ARP协议(地址解析协议):需要ip地址(应用层传入)
ARP会发起一个请求数据包(包含源/目标ip),这个数据包在链路层包装成“以太网数据包(目标mac地址全为F以此可以通过数据链路层的验证)”后在一个子网内广播,该子网中的所有主机都收到广播,因为以太网数据包中mac地址都为F,所以通过了链路层验证,网络层通过IP数据包中的IP信息判断是否是发给自己的,如果是则返回Mac地址。
ARP收到Mac地址的后会将其存到arp缓存中保留一段时间。
(ps:存在ip-mac的缓存,arp -a 可查看。)
(3)路由协议:需要ip地址(应用层传入),通过网关路由找到目标IP的子网。
小结:在不考虑arp缓存的情况下找mac地址有这两种情况。
- 目标与源机器在同一个子网
IP协议(判断出在同一个子网) --> ARP协议(通过广播找到目标机器Mac) - 目标与源机器不在同一个子网
IP协议(判断出不在同一个子网) -->路由协议(找到目标机器所在子网)-->ARP协议(通过广播找到目标机器Mac)
- 传输层
- 需要的信息:端口(应用层提供)
- 数据包:把上一称提供的数据包包装成UDP数据包(首部,数据)
首部:长度为8个字节,主要包括源端口和目标端口
数据:最大为65527个字节
- 应用层
应用层定义了各种各样的协议来规范数据格式,常见的有http,ftp,smtp等。
最后欢迎大家指正,促进共同进步,谢谢!
网友评论