网络架构--TCP/IP

TCP/IP

我们都知道国际网络规定的ios模型为7层,应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。但是在往往的实际运用当中其实在互联网中使用的是TCP/IP模型,也就是DOD模型.所以7层模型在现实网络环境中只是一个理论上的划分。Dod模型分为应用层、传输层、internet层、数据链路层、物理层。

英文对比OSI DoD
7.Application     ┐    
6.Presentation   |->       5.Application/Process
5.Session         ┘    
4.Transport       --->       4. Hostto Host
3.Network        --->      3. Internet
2.Data Link             2.Data Link      

1.Physical             1.Physical       ┘

Dod模型

应用层:

长见的应用协议有

HTTP FTP TFTPTELNETSNMP POP3SMTP DNS DHCP

传输层

1.TCP   2.UDP

TCP

!特点1.面向数据流

   2.可靠(确认序列号)

   3.面向连接

    4.字节流服务(发送方依次给我发10字节20字节30字节的数据,接收方可能不是按这种方式接收的,也就是说数据流有边界的)

!!tcp报头


               16位的源端口号                             16位目的端口号


                          32位的序列号(每传一个字节的数据序列号会自动加一)


                          32位的确认号

报头长度保留标记                         16位的窗口大小

        4位的        6bit      ack syn fin(接收方写一个值告诉发送方自己的缓存大小,发送方回应的ack窗口大小要加一)

          16位的校验和紧急指针

(包括伪首部+tcp报头+被封装的数据)

40字节)可选项和填充项

可选项包括mssopen 82 mss是本端口能接收的最大数据的大小 open 82 是存储MD5

另外要注意的是Mss在直连接口协商的是1460字节,在非直连的接口是536字节,在bgp中协商的是516字节



常用协议的端口号

FTP 20 21  

SSH 22  

telnet 23  

SMTP 25

TACACS 49  

DNS 53  

DHCP 67 68  

TFTP 69

HTTP    80  

POP3  110  

NTP  123  

HTTPS  443

Tcp在传输时会先建立3次握手的连接

建立连接的3次握手

发送方会先给接收方发送一个syn(信息同步)数据包,接收方收到后会给发送方发送方发送一个syn+ack,来确认接收方已经接收到了发送方发送到syn信息,发送方接收到接收方发送的syn+ack确认后会发送一个ack来告诉接收方我已经收到你的信息了,下面我们开始传送数据包吧,经过3次握手后,接收方会先给接收方发送一个没有数据只有tcp报文的数据包,双方在经过协商窗口的大小后开始传输数据,

结束连接的握手

发送方再传输完之后会给接受方发送一个fin+ack数据包来表示终止数据包的传输,如果接收方收到了会给发送方发送一个ack来确认我已经收到你发的信息同时会给发送方一个fin+ack,发送方接到接收方发送的ack后就会认为传输结束,但是接收方还没有收到ack确认并不认为传输结束,所以发送方还会给接受方发送一个ack确认,接收方收到ack后才会认为传输结束,这样数据传输才会结束。(我的理解,仅作参考)

Tcp最核心的信息――流控

发送方接收方(我发现我没画天赋就用文字代替吧)

发送1个字节



发送一个ack                              


第一次发送1个字节,第二次发送2个字节,第三次发送4个字节,第5次发送8个字节,依次类推,最大发送1024个字节(因为物理端口的最大传输单元MTU=1500字节)

假如接收方的缓存已经满了,那么他会丢弃下一个数据包,并且会向发送方发送一个重传请求,发送方在接到重传请求后,会再一次发送那个数据包,依然会丢弃,并发送重传请求

如果发送方在接到3次重传请求后他会认为接收方的缓存已经满了,就会把传输端口除以2进行传输,但是如果链路发送拥挤的话,发送方的重传计时器超时,并且收不到重传信息的话,发送方会把窗口大小直接降到最低,也就是降到1字节,这样来缓解数据拥挤。

Tcp的流控分为快速启动和慢速启动。把传输窗口的大小除以2 是快速启动,把传输窗口的大小直接降为最低为慢速启动

Tcp的全局同步


SERVER

PC

Route

ISP

假如有三种数据传输一种是http 一种是ftp 一种是telnet 。三种数据在传输时同时达到最高点同时达到最低点在到达目的端口时会直接发生堵塞,那么接收端口会直接把数据包丢弃,那么数据就会从发送法重新传输,而三种数据因为同时都丢弃,所以都要重传。那么,三种数据流有都会同时到达最高点,最低点,同时丢弃,这样就会极大的浪费带宽,这种现象就叫做tcp 的全局同步。解决办法是qos 中的wred wred 能给三种数据流打上不同的优先级让三种数据流在不同的时间内到达目的端口,这样就会减少端口堵塞的机会,有效的去利用带宽。






PCip add 192.168.1.2server(服务器)的ip add 100.1.1.1   PCip add是一个私有的

PC server发送一个syn  PC ip 报头是源ip add192.168.1.2 目的 ip add 100.1.1.1

Server能收到PC 发送的数据包,但是为什么PCping 不同server呢,那是因为PC 没有收到server发送的syn+ack,那又为什么收不到呢,原来在server发送的数据包经过ISP(运营商)时ISP会解封ip 报头发现目的地址是一个私有的ip add 那么他会直接给down掉,所以PC接收不到server发送的syn+ack 所以不通,那么解决的办法是在isproute相连的isp端口上做一个ACL(流量过滤)来允许或拒绝私有ip add 或其他的地址来访,为什么不能在PCisp相连的isp端口上做呢,因为PC有很多,如果是一个黑客攻击的话,你不知道他从那个端口进入,所以要在与路由器相连的isp接口上做ACL

UDP

特点

1.无面向连接、不可靠无流量控制

2.无序的

3.TCP只支持目标IP 是单播以上的上层应用

4.UDP支持目标ip是单播、多播以及广播的的上层应用

面向数据协议,应用层(直接产生udp报文)把多大的数据包给UDP协议,udp就会把多大的数据包给直接封装,所以会直接产生数据包的分片(数据包的分片将会在ip报头中讲)

TCP很少会产生数据包的分片(如果数据的MTU大于出接口处的最大MTU则就会产生分片)

Udp报头




16位的源、目端口号,16位的报文长度(udp头部+数据)16位的校验和(包含首部和数据,校验和是可以选的)

注意:TCP 的校验和是不能选的必须有UDP的校验和是可以不选的,可以没有

16位校验和的伪首部

就是给UDP 报头加上一个源目ip地址、标识符、协议号、以及16位的UDP长度

UDP校验和伪首部的作用

主要是接收方确认发送方发送的数据包中的目的ip地址是否是自己的ip add

UDP的协议抖动

由于发送方发送的数据过大在分割后的数据在接收方接收后没有按原有的顺序重组,举个例子来说,发送方向接收方发送一句“今天我请你吃饭”而在接收方重组信息是变成“你今天请我吃饭”顺序发生了颠倒的这种现象叫做UDP 的协议抖动

解决方法是:在应用层上用RDP协议来为UDP 协议增加一个编号

网络层

由于伦纳德博萨卡(Leonard Bosack)和姗蒂雷纳(Sandy Lerner)为了解决他们之间的通信问题,.路由器被发明用来解决"信息孤岛"问题.而且如果是由SWITCH来构建整个网络,那么整个网络将会有"中心节点",这样也不符合ARPANET的初衷.所以我们有了这一层,这一层的基本单元是(Packet).所有的包都有一个IP头,

常见的协议 IP IPX

IP报头



4位的版本号:0100 ipv4  0110 ipv6

4位的首部长度:最小的是20字节最大的是60字节,描述的是ip报头长度

8bit的服务类型包含两个字段:一个是优先级,一个是TOS,两种都是给数据包打标签,来决定是哪一个数据包优先转发

16bit的总长度描述的是整个数据包的大小,包括ip报文和数据

3bit的标识:第一位没用,第二位是DF位(能否允许数据包分片,0允许,1不允许)第三位是MF位(描述是否是最后一个分片包,0最后一个分片包,1不是最后一个分片包)

13bit的偏移量(用于指明分段起始点相对于报头起始点的偏移量,换句话说就是在进行分片时,数据分片切点到报头起始点的最大容量空间。

注意!!头一个分片数据包的偏移量是0,。举个例子假如说第一个分片数据包的MTU大小为1500则第一个分片大小为0,第二个分片包为1500

分片的危害:

1、有可能只有头一个分片包有四层端口号信息(源ip、目的ip、源端口号、目的端口号)后续的端口号没有端口号数据包就会被丢弃,导致数据会被重传

2、一个分片包的丢失会造成整个数据包的重传

更改MTU的命令:

     Int   f0/0

     Ip   MTU ?(?=要改的MTU的数值)

注意修改MTU时只能改小不能改大,不能超过1500

8bitTTL值(数据包的生存值)数据包每经过一个路由器传输时,数据包中的TTL值都会减1,如果减到0,则会直接丢弃。其实,TTL值也是数据包经过路由器的最大的跳数,TTL值得减1是为了防止环路产生。

8bit的协议类型:表示上一层用的是什么协议,好让接收方在解封数据包时能够更快的把数据传给相应的协议。一些协议数字有

1、 Internet消息控制协议(icmp

2、Internet组管理协议(IGMP

4、IP协议封装的ip

6、传输控制协议(TCP

17、用户数据报协议(UDP

     45、域间路由选择协议(IDRP

     88Cisco Internet 网关路由选择协议(IGRP

     89、开放式最短路径路径优先选择(OSPF

16bit的首部校验和:是针对IP报头的纠错字段

40bit的可选项

可选项包括1RR路径记录

            2、源站路由

            3.、时间戳

第一个RR路径记录:



               PC要访问router3,它会发送一个数据包。在数据包经过路由器时,路由器会先解开数据包的封装,然后TTL值先减一,看TTL值是否为0,是的话直接丢弃,否的话在看目的地址然后在查路由表看看目的地址是否在自己的路由表中,在的还就传给他的下一跳,不在则直接丢弃,转发时会在RR路径记录中记下这个路由器的出接口的IP 地址,然后直接转发,因为可选项是40个字节,减去一个时间戳,一个可选项头部,一个长度字段(共三个字节)还剩37个字节,而4个字节一个ip地址所以一共可以记录9ip地址,但是要ping通必须要一来一回,所以RR记录的是来回的IP地址,当记录到第十个IP地址是会把第一个IP地址给顶掉。

第二个源站路由;有两个1、宽松源站  2、严格源站

宽松源站:是事先在选项里边写好IP地址,然后数据包会经过写好的IP地址后再去目的地址

严格源站:是数据包会把每个下一跳都写出来,并且执行。

关闭源站路由的命令

在全局模式下   no  ip  sourse router


我们可以抓包来看

抓包的命令是(在交换机上做)

Monitor  session  1 source  interface  f0/5-6

意识是:把经过f0/5-6的数据包复制一份

Monintor  session  1 destination  int  f0/8

意思是:把复制的一份的数据包放到f0/8的端口上



数据链路层

协议有:ICMP ARP

注意:ping包和TCP/UDP无关。因为一个是二层的,一个是四层的,没有关联

ICMP

有两个1、查询(和ping包有关)

2差错通告报文(向源地址发送是因为什么而丢弃的数据包)

类型代码

0           0         回应应答

3           0          网络不可达

1主机不可达

2协议不可达

3端口不可达

4Df分片不可达

5源站路由失败

6目的网络未知

7目的主机未知

13       Acl不可达

         11           0          TTL超时

1分片重组超时

         12           0          一些坏的ip头部(校验和失败,小于20字节或大于60字节、还有就是端口接触不良)

ICMP的重定向

PC0PC1把他的默认网关写成router0ip地址,这样他们都能上网。突然有一天因为一

些原因,PC1把他的默认网关写成PC0ip地址,那么他想上网会把数据包发送到PC0PC0

会把数据包转发到默认网关的同时会做一个重定向给PC1,并且会发送正确的网关。

重定向的条件

1、设备支持重定向功能

2、重定向发生在广播网

3、一个流量从一个接口进来再从这个接口出去



Trace  router的工作原理

PC想访问router2,他会发送一个数据包,并把自己的TTL值改为1router0收到数据包后,会先把TTL值减1,结果1-1=0 所以router0会直接把数据包丢弃,并向PC发送一个网络不可达,那么PC再次发送数据包时会把TTL值加1变为2,那么router0收到数据包之后会先把TTL值减1,结果2-1=1,不为0 就会查看目的ip,并查看自己的路由表发现有去router2的路由,于是就转发并记下他的出接口的ip地址,数据包到router1时,TTL值会减1,结果1-1=0直接丢弃,并向PC 发送网络不可达,PC再次发送数据包时,TTLhi在加1,结果在router2上为0,那么router2会直接丢弃,并发送网络不可达,PC在发送数据包时会再加1,数据包就到了router2了,并且,所经过的ip地址也会记录下来

Tracl  routerping之间的区别

1、用的协议不同。Ping用的是icmp协议 tracl-router用的是UDP协议

2、路径记录不同。Ping用的是RR路径记录 tracl-router用的是TTL

3、在经过防火墙时,防火墙会过滤掉RR路径但不会过滤掉TTL

ARP

ARP的工作原理

假如说PC0要给PC1发送一个数据包,PC0ip地址是100.1.1.1 mac地址是000000000000

PC1的地址是100.2.2.2 mac地址是111111111111.但是PC0并不知道PC1mac地址那么PC0会向广播域发送一个ARP请求包,请求包中有PC0自己的源ip地址和源mac地址和目的ip地址,交换机收到这个请求包之后会先学习,把PC0ip地址和mac地址输进自己的ARP高速缓存表中然后会在广播域内泛红,其他的主机收到这个请求包之后查看目的ip是不是自己的ip地址,如果是会先把PC0的源ip地址和源mac地址输进自己的ARP 表中,然后再向PC0以单播的形式发送过去,那么PC1收到请求包之后,会先学习然后再以单播的形式发送给PC0数据抱在经过交换机时,交换机会学习到PC1的源ipmac地址,并输进自己的ARP 高速缓存表中,然后再转发给PC0,这样PC0就可以给PC1发送数据包了

!!注意:ARP请求包是以主播的形式发送的(主播地址224.0.0.5ARP回应是以单播的形式发送的

ARP的特性

后来者居上,如果两个信息相同,他会相信后到的ARE

原则

1、请求的ip地址如果和自己是一个网段,那么会直接请求目的mac地址

2、如果请求的ip地址和自己不在同一个网段,那么会向自己的网关发送ARP请求,请求网关的mac地址(不是ARP 代理)

关闭ARP代理的命令

Int  f0/0

No   ip  proxy-arp

经典案例

Router0 ping router2 的静态路由

ip  router  23.1.1.0 255.255.255.0  12.1.1.2

能通因为在不同网段所以router0 会把数据包发个自己的网关,也就是12.1.1.2

Ip  router  23.1.1.0 255.255.255.0  f0/0

不同因为下一条写的是自己的出接口,所以他会认为他们在同一个网段,属于直连,那么他会直接请求router2mac地址,结果可想而知,是不会通的

注意!!思科的路由器的ARP代理是默认开启的


案例2



这样会通的但是网速太慢想要在添一条网段(假设hub-pt  是服务器)






但是连接了一条200M的链路后PC无法访问服务器(hub-pt

为什么呢



Ip  router  32位的子网掩码优先转发  router1的端口

原来PC发送的数据包在我们200M的网速中传输,那么原理上也会ping通,但是在发送请求服务器的macARP数据包时,交换机会泛红,F0/1端口也能收到这个ARP 请求包。于是ARP就会形成一个善意的欺骗(ARP代理)高诉router1 他能到服务器,而ARP有一个特性是后来者居上,会相信后来者,于是router1会把数据包发给router0,这样就形成了一个环路



解决的办法

关闭router0 f0/1 ARP代理




本文出自 “唐僧洗�^�埏h柔” 博客,转载请与作者联系!

你可能感兴趣的:(TCP/IP)