TCP/IP For Baby
TCP/IP 协议族基础知识:
TCP (传输控制协议) - 应用程序之间通信
UDP (用户数据报协议) - 应用程序之间的简单通信
IP (网际协议) - 计算机之间的通信
ICMP (因特网消息控制协议) - 针对错误和状态
DHCP (动态主机配置协议) - 针对动态寻址
TCP 使用固定的连接
TCP 用于应用程序之间的通信。
当应用程序希望通过 TCP 与另一个应用程序通信时,它会发送一个通信请求。这个请求必须被送到一个确切的地址。在双方"握手"之后,TCP 将在两个应用程序之间建立一个全双工 (full-duplex) 的通信。
这个全双工的通信将占用两个计算机之间的通信线路,直到它被一方或双方关闭为止。
UDP 和 TCP 很相似,但是更简单,同时可靠性低于 TCP。
IP 是无连接的
IP 用于计算机之间的通信。
IP 是无连接的通信协议。它不会占用两个正在通信的计算机之间的通信线路。这样,IP 就降低了对网络线路的需求。每条线可以同时满足许多不同的计算机之间的通信需要。
通过 IP,消息(或者其他数据)被分割为小的独立的包,并通过因特网在计算机之间传送。
IP 负责将每个包路由至它的目的地。
IP 路由器
当一个 IP 包从一台计算机被发送,它会到达一个 IP 路由器。
IP 路由器负责将这个包路由至它的目的地,直接地或者通过其他的路由器。
在一个相同的通信中,一个包所经由的路径可能会和其他的包不同。而路由器负责根据通信量、网络中的错误或者其他参数来进行正确地寻址。
TCP/IP
TCP/IP 意味着 TCP 和 IP 在一起协同工作。
TCP 负责应用软件(比如您的浏览器)和网络软件之间的通信。
IP 负责计算机之间的通信。
TCP 负责将数据分割并装入 IP 包,然后在它们到达的时候重新组合它们。
IP 负责将包发送至接受者。
TCP/IP分层:
实际上分层是人为的行为,通过对协议进行层级划分助于理解。OSI七层模型和四层模型都可以概括TCP/IP协议族的层次关系。在七层模型中,多了表示层、会话层、物理层,实际上在IOT中,这些层里面包含的协议都是不被需要的,所以在IOT中分析协议模型基于四层协议就好了。
OSI七层模型各层功能解析:
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
物理层
作用:定义一些电器,机械,过程和规范,如集线器;
PDU(协议数据单元):bit/比特
设备:集线器HUB;
注意:没有寻址的概念;
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
数据链路层
作用:定义如何格式化数据,支持错误检测;
典型协议:以太网,帧中继(古董级VPN)
PDU:frame(帧)设备:以太网交换机;
备注:交换机通过MAC地址转发数据,逻辑链路控制;
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
网络层
作用:定义一个逻辑的寻址,选择最佳路径传输,路由数据包;
典型协议:IP,IPX,ICMP,ARP(IP->MAC),IARP;
PDU:packet/数据包;
设备:路由器
备注:实现寻址
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
传输层:
作用:提供可靠和尽力而为的传输;
典型协议:TCP,UDP,SPX,port(65535个端口),EIGRP,OSPF,
PDU:fragment 段;
无典型设备;
备注:负责网络传输和会话建立;
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
会话层:
作用:控制会话,建立管理终止应用程序会话;
典型协议:NFS, SQL, ASP, PHP, JSP, RSVP(资源源预留协议), windows,
备注:负责会话建立;
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
表示层:
作用:格式化数据;
典型协议:ASCII, JPEG. PNG, MP3. WAV, AVI,
备注:可以提供加密服务;
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
应用层:
作用:控制应用程序;
典型协议:telnet, ssh, http, ftp, smtp, rip, BGP, (未完待续)
备注:为应用程序提供网络服务;
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Q:什么时候有PDU?
A:当需要跟别人通信时候才有。
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
TCP/IP四层模型:
TCP/IP七层模型:
TCP/IP数据收发过程:
参考:TCP/IP详解
802.2 802.3 802.5 802.11链路层概览:
实际上IEEE 802.X规格是定义了通信的数据链路层和物理层。
TCP/IP协议族不同层次的协议之间的关系:
协议分用:
问:协议层层封装,每一层下的协议都可能被多个协议调用到,那么在封包和解包的时候怎么知道传送给哪个协议呢?
答:为了解决这个问题,TCP/IP协议在每一个协议下面都嵌入了类型字段。
比如链路层的帧格式(Frame)中,嵌入2字节类型字段指明ARP、RARP、IP帧。
IP的数据报(Fragment)中,嵌入1字节的类型字段指明TCP、UDP、ICMP、IGMP报。
TCP/UDP的段(Segment)中,嵌入2字节的端口号来指明数据段的传输端口。
数据进入协议栈的封包过程:
802.3和Ethernet帧格式(链路层封包格式):
类型码(16进制) | 协议 |
---|---|
0x0000 - 0x05DC | IEEE 802.3 长度 |
0x0101 - 0x01FF | 实验 |
0x0600 | XEROX NS IDP |
0x0660 - 0x0661 | DLOG |
0x0800 | 网际协议(IPv4) |
0x0801 | X.75 Internet |
0x0802 | NBS Internet |
0x0803 | ECMA Internet |
0x0804 | Chaosnet |
0x0805 | X.25 Level 3 |
0x0806 | 地址解析协议(ARP : Address Resolution Protocol) |
0x0808 | 帧中继 ARP (Frame Relay ARP) [RFC1701] |
0x6559 | 原始帧中继(Raw Frame Relay) [RFC1701] |
0x8035 | 动态 DARP (DRARP:Dynamic RARP)反向地址解析协议(RARP:Reverse Address Resolution Protocol) |
0x8037 | Novell Netware IPX |
0x809B | EtherTalk |
0x80D5 | IBM SNA Services over Ethernet |
0x80F3 | AppleTalk 地址解析协议(AARP:AppleTalk Address Resolution Protocol) |
0x8100 | 以太网自动保护开关(EAPS:Ethernet Automatic Protection Switching) |
0x8137 | 因特网包交换(IPX:Internet Packet Exchange) |
0x 814C | 简单网络管理协议(SNMP:Simple Network Management Protocol) |
0x86DD | 网际协议v6 (IPv6,Internet Protocol version 6) |
0x880B | 点对点协议(PPP:Point-to-Point Protocol) |
0x880C | 通用交换管理协议(GSMP:General Switch Management Protocol) |
0x8847 | 多协议标签交换(单播) MPLS:Multi-Protocol Label Switching) |
0x8848 | 多协议标签交换 |
0x8863 | 以太网上的 PPP(发现阶段)(PPPoE:PPP Over Ethernet) |
0x8864 | 以太网上的 PPP(PPP 会话阶段) (PPPoE,PPP Over Ethernet) |
0x88BB | 轻量级访问点协议(LWAPP:Light Weight Access Point Protocol) |
0x88CC | 链接层发现协议(LLDP:Link Layer Discovery Protocol) |
0x8E88 | 局域网上的 EAP(EAPOL:EAP over LAN) |
0x9000 | 配置测试协议(Loopback) |
0x9100 | VLAN 标签协议标识符(VLAN Tag Protocol Identifier) |
0x9200 | VLAN 标签协议标识符(VLAN Tag Protocol Identifier) |
0xFFFF | 保留 |
链路层解析:
链路层主要三个目的:
①为IP模块发送和接收数据报
②为ARP模块发送ARP请求和接收ARP响应
③为RARP模块发送RARP请求和接收RARP响应。
注: TCP/IP支持不同的链路层协议,这取决于网络使用硬件,如以太网、令牌环网、FDDI及RS-232串行线路等。
IP协议(网络层):
IP协议功能:在相互连接的网络之间传递IP数据报。其中包括两个部分:
①寻址与路由
②分段与重组
IP头(网络层封包格式):
IP报头长度:
IP首部固定部分有20字节,除非含有选项部分。故最小长度为20字节。
首部长度是指IP首部占32bit字的数目,包括选项(如果有)。首部长度本身为4bit字段,能表示的二进制最大数为1111,换算成十进制为15,即首部最长为15个32bit长度,即最大长度60字节。
协议字段(表示IP报为哪种上层协议传报):
ARP(地址解析协议)与IP(网际网络协议)的关系:
在以太网协议中规定,同一局域网中的一台主机要和另一台主机进行直接通信,必须要知道目标主机的MAC地址。而在TCP/IP协议栈中,网络层和传输层只关心目标主机的IP地址。这就导致在以太网中使用IP协议时,数据链路层的以太网协议接到上层IP协议提供的数据中,只包含目的主机的IP地址。于是需要一种方法,根据目的主机的IP地址,获得其MAC地址,然后方便以太网协议之间交换数据帧。这就是ARP协议要做的事情 – IP地址和MAC地址映射。
另外,当发送主机和目的主机不在同一个局域网中时,即便知道目的主机的MAC地址,两者也不能直接通信,必须经过路由转发才可以。所以此时,发送主机通过ARP协议获得的将不是目的主机的真实MAC地址,而是一台可以通往局域网外的路由器的某个端口的MAC地址。于是此后发送主机发往目的主机的所有帧,都将发往该路由器,通过它向外发送。这种情况称为ARP代理。不是只有局域网才用arp协议。
Ethernet解析IP – MAC对应时,ARP请求与响应的分组格式:
硬件类型:1 表示以太网
协议类型:和Ethernet数据帧中类型字段相同
硬件地址长度:6 (指MAC地址长度)
协议地址长度:4 (指IP地址长度)
OP操作字段:
1 表示ARP请求 (广播)
2 表示ARP应答 (单播)
免费ARP定义:
免费ARP是指主机发送ARP查找自己的IP地址。
免费ARP作用:
①宣告广播的作用,以告诉整个广播域,目前这个IP所对应的MAC地址是什么。
②检查广播域内有没有别的主机使用自己的IP,如果使用了,则提示IP冲突。
ARP攻击:
根据上述第①种作用能发现免费ARP带来的漏洞,因为目前的局域网上都没有安全的 认证系统,所以任何主机都可以发送这样的免费ARP广播,这样就会出现MAC地址欺骗。假如某银行系统局域网内有服务器A,客户机B和客户机C,客户机B 正在向服务器A提交当天的信用卡消费和账号信息(通过某种安全通信机制进行通信,确保客户机C是无法接收到两者之间传输的数据包的),这时客户机C(攻击 者)向局域网内发送了一个免费ARP广播,其源IP地址为服务器A的地址,源MAC地址为客户机C自己的MAC地址。客户机B收到这样的报文后,会将自己 ARP缓存中服务器A的MAC地址改为客户机C的MAC地址,这就形成了MAC地址欺骗,这样客户机B会将所有该发给服务器A的信息都发送给客户机C,C 在通过抓包分析就知道了很多不该知道的信息。通常为了确保A不再发送信息给B以改变B的ARP缓存里A的IP对应的MAC地址,C可以通过其他手段先将A 工具瘫痪。这样就放心大胆地进行欺骗了。这是至今都很流行的攻击手段之一。
RARP(逆地址解析协议)概述:
具有本地磁盘的系统,一般启动时从本地磁盘读取IP地址配置为自己的IP地址。
而有些系统不具备本地磁盘,则系统启动时需要使用RARP协议来获取IP地址,一般需要在网络上设置无盘机的RARP服务器,用于存储无盘机的IP地址并通过响应RARP请求将该IP地址反馈给启动中的无盘机。当无盘机得到IP地址之后,一般会使用TFTP协议进一步来获得它的系统镜像,进而引导。
RARP的分组格式(和ARP的分组格式是一样的):
硬件类型:1 表示以太网
协议类型:和Ethernet数据帧中类型字段相同
硬件地址长度:6 (指MAC地址长度)
协议地址长度:4 (指IP地址长度)
OP操作字段:
3 表示RARP请求 (广播)
4 表示RARP应答 (单播)
ICMP协议概述:
ICMP用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。
ICMP部分应用举例:
1.ping 命令使用 ICMP 回送请求和应答报文:
在网络可达性测试中使用的分组网间探测命令 ping 能产生 ICMP 回送请求和应答报文。目的主机收到 ICMP 回送请求报文后立刻回送应答报文,若源主机能收到 ICMP 回送应答报文,则说明到达该主机的网络正常。
2.路由分析诊断程序 tracert 使用了 ICMP时间超过报文
tracert 命令主要用来显示数据包到达目的主机所经过的路径。通过执行一个 tracert 到对方主机的命令,返回数据包到达目的主机所经历的路径详细信息,并显示每个路径所消耗的时间。
ICMP报文格式:
ICMP与ping:
Ping可以测试另一台主机是否可达,ping发送一份ICMP回显请求给主机,并等待返回ICMP回显应答。
ICMP回显请求和ICMP回显应答报文格式如下:
其中,类型0 +代码0表示回显应答报文;类型8 +代码0表示回显请求报文。
单播、组播、广播:
单播(unicast):
是指封包在计算机网络的传输中,目的地址为单一目标的一种传输方式。它是现今网络应用最为广泛,通常所使用的网络协议或服务大多采用单播传输,例如一切基于TCP的协议。
组播(multicast):
也叫多播, 多点广播或群播。 指把信息同时传递给一组目的地址。它使用策略是最高效的,因为消息在每条网络链路上只需传递一次,而且只有在链路分叉的时候,消息才会被复制。
广播(broadcast):
是指封包在计算机网络中传输时,目的地址为网络中所有设备的一种传输方式。实际上,这里所说的“所有设备”也是限定在一个范围之中,称为“广播域”。
单播、组播、广播示意图:
IGMP功能概述:
提供internet网际多点传送的功能,即将一个ip包拷贝给多个host。
IGMP工作流程:
一.当主机加入一个新的工作组时,它发送一个igmp host membership report的报文给全部主机组,宣布此成员关系.本地多点广播路由器接受到这个报文后,向Internet上的其他多路广播路由器传播这个关系信息,建立必要的路由.与此同时,在主机的网络接口上将ip主机组地址映射为mac地址,并重新设置地址过滤器.
二. 为了处理动态的成员关系,本地多路广播路由器周期性的轮询本地网络上的主机,以便确定在各个主机组有哪些主机,这个轮询过程是通过发送igmp host membership query报文来实现的,这个报文发送给全部主机组,且报文的ttl域设为1,以确保报文不会传送到lan以外.受到报文的主机组成员会发送响应报文.如果所有的主机组成员同时响应的话,就可能造成网络阻塞.IGMP协议采用了随机延时的方法来避免这个情况.这样就保证了在同一时刻每个主机组中只有一个成员在发送响应报文。
IGMP报文格式:
传输层TCP/UDP的段格式:
UDP头:
TCP头:
首部长度:
首部长度是指TCP首部占32bit字的数目,包括选项(如果有)。首部长度本身为4bit字段,能表示的二进制最大数为1111,换算成十进制为15,即首部最长为15个32bit长度,即最大长度60字节。