TCP/IP详解学习笔记(一)--各层主要协议的概览

1.概览(自下而上的分层)

1.1 链路层(网络接口卡、网关):与线路(网线、集线器等)一起处理物理接口细节。

1.2 网络层(IP层):处理数据包的在网络中的活动,比如数据包的路由:

  • IP(网际协议):为每一个网卡分配一个逻辑地址(IPv4或者IPv6版本)。
  • ICMP(网际控制消息协议):用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息,并不包含用户数据。
  • IGMP(Internet组管理协议):把UDP数据包多播到多个主机;
  • ARP(地址解析协议):ip=>mac,
  • RARP(反向地址解析协议):mac=>ip;

1.3 传输层:为两台主机提供端到端的通信,主要有两个协议:

  • TCP协议:提供高可靠的数据通信,主要进行数据分组、确认收到的分组、设置超时时钟等
  • UDP协议:只把数据报的分组从一个主机发送到另一个主机,不能保证数据能够达到目的地。

1.4 应用层:处理特定的程序细节,常见应用层协议:

  • Telnet(远程登录协议)
  • FTP(文件传输协议)
  • SMTP(简单邮件传输协议)
  • SNMP(简单网络管理协议)
  • HTTP(超文本传输协议)
  • DNS(域名解析协议)

2 自下而上的学习

2.1链路层

2.1.1 以太网和IEEE802数据帧格式

RFC894和IEEE802帧格式

一些说明:

  1. 目的地址和源地址:为48bit的mac地址(16进制表示为:50-bd-5f-73-75-6a);

  2. 数据部分:为IP数据报;

  3. IEEE802相对于RFC894多了8个字节的控制数据,总长度是一致的; 链路层数据帧的基本格式

  4. HEAD=目的MAC地址+源MAC地址+类型/长度;

  5. Data=需要传送的数据报(IP数据报)

2.1.2 MTU(最大传输单元)

如2.1.1的RFC894及IEEE802所示数据报部分有最大字节数限制(RFC1500\IEEE1492)这个限制就是MTU。如果一个IP数据报大于MTU就会被分片传输。

2.1.3 链路层的通信过程

请参看前面的的博客 MAC表、ARP缓存表、路由表以及端口映射NAT MAC表那一段对基于MAC进行通信的机制描述;

2.1.4 以太网传输控制协议(CSMA/CD协议)

协议的基本流程:

  1. 每个节点再发送数据前侦听传输链路是否有信号,如果没有信号,则发送数据.---先侦听后发送
  2. 在发送数据时,检测是否被打断[据传输有延时电磁波速度为最大光速,在其他介质中会更低,两个节点前后分别发送信数据后又分别检测到对方的数据,则认为被打断].---边侦听便发送
  3. 两者都会停止并随即等待一点时间后再次尝试数据.---随机等待后重发

一个比较形象的现实场景(就是一圈人说话):

  1. 你先检测空气是不是安静().如果不是,就等待安静后在发言,如果是则自己说话.---先侦听后发送
  2. 在你说话的时候,别人不知道你要说话,和你前后发言造成冲突,然后你们两个则停止发言---边侦听便发送
  3. 然后你们两个各自随机等待一段时间后再次尝试说话---冲突,随即等待后重发

2.2网络层(IP层)

理论上来说:基于链路层这一层协议(主要是MAC地址),我们就可以完成任意主机之间的通讯(只要在物理上互联),但是这样存在一个问题。当主机的数量逐渐增长时,每个主机和交换机需要学习的MAC表也会迅速增长,以太网发送数据根据CSMA/CD协议发送数据节点增多后冲突机率会增大,造成这样的情况:[交换机性能不足(MAC表巨大难以存储查找),线路上几乎冲突噪声,造成网络瘫痪根本无法通行]。请参考你们上自习课时(老师又不在)的情况,而只有一个人说话才能保证数据正确无误的传输。那么怎么解决这个问题呢?物理上相邻的区域被划分到一个房间,每个区域内设置一个中心节点,由中心节点负责跨区域信息的转达,非中心节点不允许跨区域和其他人说话,这样一来,区域内可以正常交流,区域之间的噪声会大幅减少;以太网也进行了类似这样的划分,如何尽心划分的呢?IP协议。IP协议在逻辑上为每个节点添加了一个唯一的身份标识。

2.2.1 IP及网络划分:

2.2.1.1 IP的格式:
1)目前广泛使用的IP版本为IPv4,IPv4协议规定网络地址由32个二进制位组成。习惯上,我们用分成四段的十进制数表示IP地址,从0.0.0.0一直到255.255.255.255。同时网络上每个主机由唯一的IP与之对应。
2.2.1.2 网络划分:
如何标识一个网络区域呢?IP和子网掩码;
a. 子网掩码分为两部分组成(网络号+主机号,也是32bit,从左到右全1的部分表示网络化,全0的部分表示主机号),
b. 两个IP分别与子网掩码求与后:如果结果相同的则主机在同一个网络区间。
2.2.1.3 IP与MAC
IP层是基于链路层建立起来的,那么MAC和IP是怎么联系起来呢?
ARP协议:IP=>MAC,主机通过APR协议学习并存储同一网段内需要通信的主机的IP与MAC的对应关系[arp缓存表]
RARP协议:MAC=>IP;

进行网络划分后:增加了ARP缓存表、路由表、减小了交换机的MAC表,同时增加一种设备路由器(中心节点),路由器对于子网内的IP数据报流转不进行调制,根据路由表进行IP数据报的进行网段间的转发。

2.2.2 IP数据路由基本过程[IP层如何处理数数据的]:

2.2.2.1 对于主机:

如果目的IP和自己在同一个子网内:

1)直接去APR缓存内查询目标IP对应的MAC然后发送给交换机发送;
2)如果在ARP缓存内没有目标IP及MAC,则通过交换机发送APR请求广播,等待响应后学习MAC,进入1)流程;
3)如果ARP请求广播无响应,则返回目标IP无法找到给上层调用者;

如果不在同一个子网内:

会交给路由器进行IP数据报的路由(转发);
2.2.2.2 对于路由器:

a.自己生成的数据报处理规则和主机一致;

b.其他主机发给自己的IP数据报则首先检查数据报的IP是否是自己的IP或者广播IP(根据自己内存中的路由表),如果是则自己进行相应的处理(响应或者广播),否则进行转发.

IP数据报的路由过程:

1)路由器接收到数据包,提取目标IP地址及自己的子网掩码计算目标网络地址;
2)根据目标网络地址查找路由表,如果找到目标网络地址就按照相应的出口发送到下一个路由器;
3)如果没有找到,就看一下有没有默认路由,如果有就按照默认路由的出口发送给下一个路由器;
4)如果没有找到默认路由就给源IP发送一个出错ICMP数据包表明没法传递该数据包;

具体机制请参看:MAC表、ARP缓存表、路由表以及端口映射NAT的路由表部分;

2.2.3 IP数据报首部

IP数据报首部格式

字段解释:

0-3位:IP协议的版本号目前是4;
4-7位:IP数据报首部有多少个4字节数,因为只有4位所以IP数据报首部最大长度为(8+4+2+1)*4=60;
8-15位:服务类型(Type of Service),基本没什么用,默认值为5;3(优先权)+4(最小延时?,最大吞吐?,最高可靠?,最小费用?,0false1true)+1(未使用强制0)
15-31位:IP数据报总字节数,包括首部;
32-47位:16bit标识符,用于标识发送IP数据包的先后顺序;IP数据报被分片传输后到达目的地的顺序一般是错乱的,利用这个标识位来判断数据报的先后顺序进行拼装;
48-51位:标志位,
52-63位:片偏移,
64-71位:生存时间(time to live),数据报经过的最大路由器次数,每经过一次路由器数值-1,为0时。IP数据报被丢弃。(默认值为64?原因是什么不知道,有知道请告知)
72-79位:表明上层协议是什么协议?TCP?UDP?ICMP?IGMP?
80-95位:首部检验和,用于数据传输的正确性校验;
96-127位:32bit源IP地址
128-159位:32bit目的IP地址
追加选项,一般不使用,指定一些传输策略等等,但要求长度必须是32bit的整数倍;

2.2.4 5类Ip地址(ABCDE):

五类IP:根据低位1的数量来分类

"五类IP"

五类IP范围:

五类IP范围

备注:这几个分类并没有什么用,

一些特殊的的IP地址:

1. 0.0.0.0:严格来说,这已经不算是一个IP了,指代本机的全部网络接口,在做网络监听时会用到;
2. 255.255.255.255:全网广播IP地址,限制广播IP,发往这个IP的数据会发往全Internet网络的所有主机
3. 127.0.0.1:本机地址,主要用于测试。在Windows系统中,这个地址有一个别名“Localhost”。寻址这样一个地址,是不能把它发到网络接口的。除此之外,所有发往127.0.0.0\8网段内任意IP的数据报都会转发到127.0.0.1。
4. 224.0.0.1:组播地址,224.0.0.0\8网段全是这样的地址;224.0.0.1特指所有主机,224.0.0.2特指所有路由器;
5. 私网IP:此范围内的IP用作私网,其数据报文不会被路由器路由; 
  -10.0.0.0/8:10.0.0.0-10.255.255.255(相当于10.0.0.0网段 =》A类网络2^24-2=16777214个)
  -172.16.0.0/12:172.16.0.0-172.31.255.255(相当于172.16.0.0网段2^20-2介于A类和B类网路之间)
  -192.168.0.0/16:192.168.0.0-192.168.255.255(相当于192.168.0.0网络 B类网络2^16-2=65534个)

2.3传输层(TCP/UDP协议)

2.3.1TCP\UDP数据包打包过程(Encapsulation):

TCP报文格式

UDP报文格式与此类似,不过UDP首部字段长度为8个字节

端口(Port):在多进程环境中,每个进程都有可能发送IP数据包,为了区分各个进程添加了长度16bit的整数来区分。

分为TCP和UDP端口两大类

2.3.2TCP\UDP 数据包解包(Demultiplexing)

网络数据包解包

基本就是按照定义的格式分割取出对自己有用的协议首部,最后拼装;

2.3.3端口号(Port)

请参考4数据包打包时的备注;1-1023之间的端口号为系统使用; 常用端口说明

2.4应用层

2.4.1 DNS协议

2.4.1.1 域名的层级划分:
2.4.1.2 DNS解析过程:
2.4.1.3 hosts文件:

2.4.2 HTTP协议

2.4.3 VPN协议:

3.总结

基本上算是有个大概的学习路径,也建立起基本的网络框架了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章