vlambda博客
学习文章列表

从0开始http之旅-网络模型简介

1⃣️ TCP/IP模型和OSI模型简介


示意图



第一层链接层,也是数据链路层或者MAC层,底层以太网 、wife等原始数据包的发送

第三层传输层,TCP、UDP等传输协议

第四层应用层,经过下层的封装,层协议较多,http、sftp、smtp、ssh等等


知道了tcp/ip的层级分布,那么我们看一下点击浏览器的过程在此都做了什么

从0开始http之旅-网络模型简介


  1. 当收到一个请求,也就是process_layer2(buffer)的时候查看MAC头是否和自己是一样的,一样说明是发送给自己的

  2. 然后调用process_layer3(buffer),二层MAC已经被摘除,查看三层的ip头是否和自己的ip是一样的,一样的则是发给自己的,不是则转发出去

  3. 假设用的tcp协议,process_tcp(buffer),查看tcp头信息,这里有端口号,分发给不同的监听端口进行处理

  4. 进行请求处理

  5. 整理好信息,从网口发出


介绍完TCP/IP的四层模型,我们来看下和iso的osi的七层网络模型


第一层:物理层,TCP/IP 里无对应;

第二层:数据链路层,对应 TCP/IP 的链接层;

第三层:网络层,对应 TCP/IP 的网际层;

第四层:传输层,对应 TCP/IP 的传输层;

第五、六、七层:统一对应到 TCP/IP 的应用层。


2、数据链路层

三个主要职责

  1. 为IP模块发送和接收IP数据报

  2. 为ARP模块发送ARP和接收ARP应答

  3. 为RARP发送RARP请求和接收RARP应答

  • IP协议大家都知道位于TCP/IP模型中中的网际层,上层是传输层,下层是链接层

  • 还有很多其他的协议,以太网,PPP协议(adsl宽带)以及loopback协议

1、IP协议

IP协议是TCP/Ip协议的狠心,所有的TCP、UDP、IGCP的数据都是以Ip数据格式传输的。

IP协议是不可靠的,IP协议没有提供一种数据传达以后的处理机制,这被认为是上层协议TCP或者UDP要做的事

所以TCP是一个可靠的协议,而UDP就没有那么可靠。

IP协议头信息


版本号:IP协议的版本,例如ipv4值为4


头部长度:4位最大长度为0xF,盖子短表示单位是字节(4字节)


服务类型:3位优先权字段+4位TOS字段+1位保留字段,4位TOS字段分别表示最小延时、最大吞吐量、最高可靠性、最小费用,其中最多有一个能置为1。应用程序根据实际需要来设置 TOS值,如ssh和telnet这样的登录程序需要的是最小延时的服务,文件传输ftp需要的是最大吞吐量的服务


总长度:指整个IP数据报的长度,单位字节,即IP数据报的最大长度为65535字节(2的16次方),由于MTU的限制,长度超过MTU的数据报将被分片传输,---最大传输单元(Maximum Transmission Unit,MTU)用来通知对方所能接受数据服务单元的最大尺寸,说明发送方能够接受的有效载荷大小


标识:唯一地标识主机发送的每一个数据报,其初始值是随机的,每发送一个数据报其值就加1。同一个数据报的所有分片都具有相同的标识值


标志: 位1保留,位2表禁止分片(DF),若设置了此位,IP模块将不对数据报进行分片,在此情况下若IP数据报超过MTU,IP模块将丢弃数据报并返回一个ICMP差错报文;位3标识更多分片(MF),除了数据报的最后一个分片,其他分片都要把它设置为1

位偏移:分片相对原始IP数据报数据部分的偏移。实际的偏移值为该值左移3位后得到的,所以除了最后一个IP数据报分片外,每个IP分片的数据部分的长度都必须是8的整数倍


生存时间::数据报到达目的地之前允许经过的路由器跳数。TTL值被发送端设置,常设置为64。数据报在转发过程中每经过一个路由该值就被路由器减1.当TTL值为0时,路由器就将该数据包丢弃,并向源端发送一个ICMP差错报文。TTL可以防止数据报陷入路由循环


协议: 区分IP协议上的上层协议。在Linux系统的/etc/protocols文件中定义了所有上层协议对应的协议字段,ICMP为1,TCP为6,UDP为17


头部校验和:由发送端填充接收端对其使用CRC算法校验,检查IP数据报头部在传输过程中是否损坏



选项:可变长的可选信息,最多包含40字节。选项字段很少被使用。可用的IP可选项有:  

     a. 记录路由: 记录数据包途径的所有路由的IP,这样可以追踪数据包的传递路径  

TTL 8bit :生存时间,数据报到达目的地之前经过的路由数,每经过一次路由就将该值减1,当TTL位0的时候,路由器就会将该数据报丢弃,8bit最大255,常设置为64


IP路由选择

最特殊的情况是主机对主机直连,那么主机根本不需要寻找路由,直接传递数据就好,依靠ARP协议广播就可以

主机经过若干个路由器和目的主机连接,那么路由器就要通过ip包的信息来为ip寻找下一个合适的目标来进行传递,如果数据包的TTL到期就丢弃

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

搜索路由表,如果匹配同子网路由器失败,则匹配同网号路由器,如果找到路由器,则将该包发向路由器。

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

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

  这再一次证明了,ip包是不可靠的。因为它不保证送达。


ARP协议

  1. ARP协议是一种解析协议,本来主机是完全不知道这个IP在哪个主机的哪个接口

  2. 而广播主机收到后,就放入缓存ARP的缓存中,发送官博的主机就会用心的ARP缓存数据发送数据包

任何系统

arp -a
? (169.254.0.32) at 0:f4:8d:a0:9:db on en0 [ethernet] ? (169.254.0.171) at 5c:80:b6:45:a2:63 on en0 [ethernet] ? (169.254.8.69) at 0:f4:8d:db:36:81 on en0 [ethernet] ? (169.254.9.124) at 9a:e7:bf:d:d4:a6 on en0 [ethernet] ? (169.254.10.1) at 72:d7:e6:bb:87:90 on en0 [ethernet] ? (169.254.11.88) at 50:e0:85:50:e0:d3 on en0 [ethernet] ? (169.254.14.160) at a0:c5:89:a3:fb:56 on en0 [ethernet] ? (169.254.17.14) at 2:c6:7e:4a:d2:36 on en0 [ethernet] ? (169.254.17.242) at 14:20:5e:10:b5:3c on en0 [ethernet]
 

ARP的高速缓存时间是20分钟


2、ICMP协议

百度百科的解释

ICMP(Internet Control Message Protocol)Internet控制报文协议。它是TCP/IP协议簇的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。 这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用 font>

ICMP使用IP的基本支持,就像它是一个更高级别的协议,但是,ICMP实际上是IP的一个组成部分,必须由每个IP模块实现。

IP协议并不是一个可靠的协议,它不保证数据被送达,那么,自然的,保证数据送达的工作应该由其他的模块来完成。其中一个重要的模块就是ICMP(网络控制报文)协议。

ICMP协议大致分为两类,一种是查询报文,一种是差错报文。其中查询报文有以下几种用途:

  1. ping查询

  1. 子网掩码查询(用于无盘工作站在初始化自身的时候初始化子网掩码)

  1. 时间戳查询(可以用来同步时间)

  2. ICMP的应用--Traceroute


IP选路

静态路由选路

查看路由表

netstat -rn  Routing tables  Internet: Destination Gateway Flags Refs Use Netif Expire default 172.16.63.254 UGSc 114 8 en0 10.8/16 10.9.0.1 UGSc 0 0 utun1 10.9/24 10.9.0.104 UGSc 107 0 utun1 10.9/16 10.9.0.1 UGSc 0 0 utun1 10.9.0.104 10.9.0.104 UH 1 0 utun1 10.29.114.134/32 10.9.0.1 UGSc 0 0 utun1 10.47.67.196/32 10.9.0.1 UGSc 0 0 utun1 10.111/16 10.9.0.1 UGSc 0 0 utun1 10.111.179.243/32 10.9.0.1 UGSc 0 0 utun1 10.168.100.103/32 10.9.0.1 UGSc 0 0 utun1 47.52.55.213/32 10.9.0.1 UGSc 0 0 utun1 47.75.96.181/32 10.9.0.1 UGSc 0 0 utun1 47.75.168.58/32 10.9.0.1 UGSc 0 0 utun1 47.91.193.192/32 10.9.0.1 UGSc 0 0 utun1 47.91.223.112/32 10.9.0.1 UGSc 0 0 utun1 47.93.84.213/32 10.9.0.1 UGSc 0 0 utun1 47.96.1.126/32 10.9.0.1 UGSc 0 

Flags 解析

U 表明该路由可用

H表明该路由是到一个主机,如果没有该标志,说明Destination是一个网络,换句话说Destination就应该写成一个网络号和子网号的组合,而不包括主机号(主机号码处为0),例如 10.9.0.104

D表明该路由是为重定向报文创建的

M该路由已经被重定向报文修改

这样,IP选路的方式就可以更加具体化了。如下

  1. 如果2失败就发送到Default网关


本文简单的介绍了TCP/IP协议和osi七层模型,下一讲哦我们细化每个环节,来看下tcp是怎么样的。