全硬件TCP/IP协议栈学习笔记(第二天:TCP/IP协议学习二)

描述

关于昨天的“网络层”,还有最后一点说明,由于IP数据包是放在以太网数据包里发送的,所以我们必须同时知道两个地址,一个是对方的MAC地址,另一个是对方的IP地址。但是在通常情况下,对方的IP地址是已知的,但是我们不知道他的MAC地址。而这又分为两种情况,第一种情况,如果两台主机不在同一个子网络,那么事实上没有办法得到对方的MAC地址,只能把数据包传送到两个子网络连接处的“网关”,让网关去处理。

第二种情况,如果两台主机在一个子网络,那么我们可以使用ARP协议,得到对方的MAC地址。ARP协议也是发出一个数据包,其中包含他要查询的的主机的IP地址,在对方IP一栏,填的是FF:FF:FF:fFF:FF,表示这是一个“广播”地址,他所在的子网络的每一台主机,都会收到这个数据包,从中取出IP地址,与自己的IP地址进行比较。如果两者相同,都做出回复,向对方报告自己的MAC地址,否则就丢弃这个包。有了ARP协议之后,我们就可以得到同一个子网络中的主机MAC地址,可以把数据包发送到任意一个主机之上。

IP协议是TCP/IP的核心,所有的TCP,UDP,IMCP,IGCP的数据都是以IP数据格式。但是IP不是可靠的协议,这就是说,IP协议没有提供一种数据未传达以后的处理机制。而这被认为是上层协议要做的事,所以这也就是出现了TCP是一个可靠的协议,而UDP就没有那么可靠。

其中有一个8位生存时间(TTL)字段,该字段规定了该数据包在穿过多少个路由之后才会被抛弃,而这就证明IP协议是不可靠的,他不能保证数据被送达,某个IP数据包每穿过,该数据包的TTL数值就会减少1,当这个数据包的TTL成为0时,它就会被抛弃。这个数段的最大值就是255,也就是说一个协议包也就是在路由器中穿行了255次之后就会被抛弃,根据系统的不同,这个数据也不太一样。

如果IP数据包的TTL(生命周期)以到,则该IP数据包就被抛弃。

搜索路由表,优先搜索匹配主机,如果能找到和IP地址完全一致的目标主机,则将该包发向目标主机

搜索路由表,如果匹配主机失败,则匹配同子网的路由器,这需要“子网掩码(1.3.)”的协助。如果找到路由器,则将该包发向路由器。

搜索路由表,如果匹配同子网路由器失败,则匹配同网号(第一章有讲解)路由器,如果找到路由器,则将该包发向路由器。

搜索陆游表,如果以上都失败了,就搜索默认路由,如果默认路由存在,则发包

如果都失败了,就丢掉这个包。

由于IP协议不是一个可靠的协议,他不能保证数据被送达,而保证数据送达的工作应该由其他的模块来完成。其中一个很重要的模块就是ICMP(网络控制报文)协议。当传送IP数据包发生错误时,比如主机不可达,路由不可达等等,ICMP会把错误信息封包,然后传回给主机。给主机一个处理错误的机会,这正是建立在IP层以上的协议就是可以做到安全的原因。ICMP数据包由8bit的错误类型和16bit的校验位组成。

尽管在大多数情况下,错误的包传送应该给出ICMP报文,但是在特殊情况下,是不产生ICMP错误报文的。如下

ICMP差错报文不会产生ICMP差错报文(出IMCP查询报文)(防止IMCP的无限产生和传送)

目的地址是广播地址或多播地址的IP数据报。

作为链路层广播的数据报。

不是IP分片的第一片。

源地址不是单个主机的数据报。这就是说,源地址不能为零地址、环回地址、广播地 址或多播地址。

虽然里面的一些规定现在还不是很明白,但是所有的这一切规定,都是为了防止产生ICMP报文的无限传播而定义的。

七.传输层

1.由来:有了MAC地址和IP地址,我们已经可以在互联网上任意两台主机上建立通信。而你在多个进程的时候,许多程序都要使用网络,如一边浏览网络,一边与朋友聊天。当一个数据包从互联网上发过来的时候,你怎么知道他是网络的内容还是在线聊天的内容。因此我们还需要一个参数,表示这个数据包到底供哪个程序使用,这个参数就叫做“端口”,他其实就是每一个使用网卡程序的编号。每个数据发送到主机指定端口,所以不同的程序就能取到自己所需要的数据。“端口”是0到65535之间的一个整数,正好是16个二进制位。而0到1023的端口被系统占用,用户只能选取大于1023的端口。不管是浏览网页还是在线聊天,应用程序会随机选用一个端口,然后与服务器的相应端口联系。

“传输层”的功能,就是建立“端口到端口”的通信。相比之下,网络层只能“主机到主机”的通信。只要能确定主机和端口,我们就能实现程序之间的交流。

因此,Unix系统就把主机+端口,叫做“套接字”。有了它,就可以进行网络应用的开发了

2.UDP协议

我们现在必须在数据包中加入端口信息,这就需要新的协议,最简单的实现就是UDP协议,他的格式几乎就是在数据前边加上端口号。

UDP数据包,也是由“标头”和“数据”两部分构成。标头部分主要定义了发出端口和接收端口,“数据”部分就是具体的内容。然后把整个UDP数据包放入IP数据包的数据部分,而IP数据包在以太网的数据包中,所以整个以太网数据包现在就变成了这个样子:

具体的协议信息我们明天再续

学海无涯...

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分