1、网络协议通常分作不同的层次进行开发,每一层负责不同的通讯功能,比较常见的TCP分成四层:
①链路层:也称作数据链路层(OSI第二层的名称)或网络接口层,对应OSI模型的物理层和数据链路层。
②网络层:也称作互联网层,对应OSI的第三层,负责分组的路由功能,包括了IP以及ICMP及IGMP协议。
③传输层:为两台主机提供端到端的通讯,在TCP/IP协议族中有TCP/UDP两个协议,对应着OSI模型的第四层。
④应用层:负责特定的应用程序的细节问题。
2、应用程序一般只是一个用户进程,而下三层则一般在操作系统的内核中完成,虽然不是必须的,但是通常这样处理。下三层对应用程序一无所知,但是它们需要处理所有的通讯细节。
3、应用层和传输层在端系统(终端设备)中才被需要,因为他们需要提供端到端的通讯,而中间的传输设备只需要提供跳到跳的协议即可。
4、网络层IP只是提供了不可靠的服务,TCP在不可靠的IP层上提供了一个可靠地传输层,为了提供这种可靠地服务,TCP采用了比如超时重发、发送和接收端的确认分组等机制。
5、路由器具有两个及以上的网络接口,任何具有多个接口的系统,都称作 multihomed(多接口的),一个主机也可以具有多个网络接口,但是一般不称作路由器,除非他它的功能只是单纯的把分组从一个几口传送到另一个接口。网桥是链路层上对网络进行互联,而路由器则是在网络层对网络进行互联。
6、封装
TCP传送给IP的数据单元称作TCP报文段或者简称TCP段(TCP Segment),UDP传给IP的数据单元称作UDP数据包(UDP Datagram),IP传给网络接口层的数据单元称作IP数据包(IP Datagram),通过以太网传送的比特流称作 帧(frame)。
IP和网络接口接口层之间传送的数据单元应该是分组(packet),分组既可以是一个IP数据包,也可以是IP数据包的一个片(fragment)。
7、IP的头部加入了一个8位的数值称作协议域,其中1代表ICMP,2代表IGMP,6代表TCP,17代表UDP协议。【/etc/protocols】而TCP和UDP的头部使用一个16位的端口号【/etc/services】,与此类似的以太网的帧头部也有一个16bit的类型域用来标示承载的是什么三层协议,这种分层的协议标示,从最下面开始往上检查以确定上层协议的过程称作 分用(Demultiplexing)。
以太网→ ARP和RARP→ IP(ICMP,IGMP)→TCP/UDP→高层协议
|
ICMP是互联网控制协议,IP层用它与其他主机或路由器交换错误报文和其他的重要消息(ping就是使用的这个),是IP协议的附属协议,但是又封装到IP协议里面,分类挺纠结。
IGMP是Internet组管理协议,它用来把一个UDP数据报多播到多个主机上,也是封装到IP内的,但也是IP的附属协议,因此定位和ICMP一样,挺纠结。
7、端口1-1023是保留的端口,1024-5000端口都算作特殊作用的端口,5000以上用于不太常用的应用。
链路层
1、TCP/IP协议族中,链路层主要三个目的:
①为IP模块发送和接收IP数据报。
②为ARP模块发送ARP请求和ARP应答。
③为RARP发送RARP请求和接收RARP应答。
TCP/IP支持不同的链路层协议,这个取决于网络所使用的硬件,比如以太网、令牌环网、FDDI以及RS-232串行线路【大爷的这个都支持】
2、以太网
以太网标准:这个术语其实是 数字设备公司(DEC)和Intel以及Xerox(施乐)公司在1982年联合推出的标准,采用CSMA/CD的媒体接入方式,速率是10Mbps,地址长度48位,在RFC894进行详细的描述。
802标准:IEEE电子电气工程师协会稍后几年公布了不同的标准集,其中802.3针对CSMA/CD网络,802.4针对令牌总线,802.5针对令牌环,共同的部分在802.2中定义【RFC 1042】,也就是802网络共有的逻辑链路控制(LLC,Logic Link Control)。
不幸的是,以太网和802.2/802.3定义的帧格式和以太网的是不相同的,真正使用的还是以太网标准,两种帧格式都是使用48bit(6字节)的目标地址和源地址,ARP和RARP协议进行对32bit的IP地址和48bit的硬件地址进行映射。
开头的6个字节的目标地址和6个字节的源地址结束后的2个字节的就不相同了
以太网定义的为类型,而802.3中定义的是长度【长度是其后面的数据的字节长度但是不包含CRC校验码长度】,802标准中的类型由后续的 子网接入协议(SNAP,Sub-network Access Protocol)的首部给出,类型编码和以太网相同。
以太网帧格式中,类型字段之后就是数据,而802标准中的跟随的是3字节的802.2LLC和5字节的802.2SNAP。
802.3规定数据部分最少为38个字节,以太网则要求至少46个字节的数据,如果不够则进行插入填充的(pad)字节
尾部4个字节使用与CRC校验,也称作FCS(真检验序列)
3、尾部封装
尾部封装(trailer encapsulation),早起BSD系统为了提高性能的实验格式,就是把开头的IP和TCP首部移到尾部(CRC之前),这样的话就可以直接将数据映射到硬件页面上,节约了内存到内存的复制过程,已经被反对。
4、SLIP(serial Line IP)
串行IP协议,是在串行线路上对IP数据报进行封装的简单形式,描述于RFC 1055文档中,SLIP适用于家庭中计算机都有的RS232和高速串行调制解调器接入Internet。
①IP数据报以一个END(0xc0)的特殊字符结束,同时为了防止数据报到来之前的线路噪声当成数据,数据的开头部分也会加一个END(0xc0)的字符。
②如果报中有END(0xc0)字符,那就连续传输两个字节 0xdb 0xdc 来代替它,0xdb 被称作SLIP的ESC字符,但是和ASCII中的ESC(0x1b)不同。
③如果IP报文中含有SLIP的ESP字符,那就连续发送两个字符 0xdb 0xdd 来代替它。
因此IP中不含有c0和db的话,就是IP包长度+2个字节,如果有转义的继续增加转义个数量的字符
SLIP的缺点:
①每一端需要知道对方的IP地址,没有办法把本端的地址告诉对方。
②数据帧中没有类型字段,因此每条串行线路用于SLIP时不能同时使用其它的协议。
③没有校验和等字段,错误只能等待上层协议来发现(比如TCP)。
压缩的SLIP(CSLIP)
串行线路一般速率较低(19200b/s或更低),而且通讯经常是交互的,因此SLIP线路上的小的TCP分组交换会开销很大,比如一个字节的数据就需要20个字节的IP头部和20个字节的TCP头部,因此有了CSLIP协议,能把40个字节开销压缩到3~5个字节,因此能在CSLIP每一端维持高达16个TCP连接。
5、PPP点对点协议
Point to Point 协议修改了SLIP协议中的所有的缺陷,因此PPP协议包含如下的三个部分:
①在串行链路上封装IP数据报的方法。PPP既支持8位和无奇偶校验的异步模式(串行几口),也支持面向比特的同步连链接。
②LCP(链路控制协议)出现,可以允许双方协商确定在建立、配置和测试链路的不同选项。
③NCP(网络控制协议)针对不同的网络层协议,完成网络层的一些协商和操作。
每一个帧都是以 0x7e 开始和结束,然后是一个地址字节(Address),值始终是 0xff,然后是一个值为 0x03 的控制字节(Control)
接下来是协议字节【0x0021代表IP数据报+0xc021代表LCP数据 + 0x8021代表NCP数据】
①出现0x7e标志字符的时候,同步链路中通过比特填充的硬件技术解决,异步链路中使用 0x7d 进行转义,发送两个连续字符 0x7d 0x5e 。
②当遇到 0x7d 字符时,使用 0x7d 0x5d 进行转义字符的转义。
③默认情况下小于 0x20 的都需要进行转义,防止这些非打印字符出现在双方主机的串行接口驱动程序中,因为它们可能有特殊含义。
通过链路控制协议,大部分可以通过协商省略标识符和地址字段,减少体积。
PPP比SLIP的优点:
①PPP支持在单根串行线路上运行多种协议,不只是IP协议。
②每一帧都有CRC。
③双方通讯可以进行IP地址的动态协商(使用IP网络控制协议)。
④客队多个数据链路进行设置,每个帧首部增加3个字节。
6、环回接口
大多数都支持loopback interface,运行在同一台计算机上的客户端程序和服务器程序通过TCP/IP进行通讯,一旦传输层检测到目的端口地址是环回地址时,可以省略部分的传输层以及全部的网络层操作。
网络层把一份数据报传送给环回接口,就像传给其他链路层一样,只不过环回接口把它返回到了IP输入队列中了,广播或者多播也会复制一份到环回接口,因为广播和多播定义包含主机本身。
7、MTU(Maximum Transfer Unit 最大传输单元)
以太网和802.3对数据帧长度都有一个限制,最大值分别为 1500【最少46】 和 1492【最少38】字节,链路层的这个特性称作 最大传输单元(MTU)
如果IP层有一个数据报要传,而且数据长度比链路层的MTU要大,那么IP层就需要进行分片(fragmentation),吧数据报拆成若干片,每一片都要小于MTU。
点对点的链路层(SLIP和PPP)的MTU并不是网络媒体的物理特性,相反它是一个逻辑限制,目的是为交互使用提供足够快的响应时间。
路径MTU
两台主机路径中最小的MTU被称作路径MTU,根据路由不同可能结果不同,而且两个方向上的MTU值可能不同,发现方法以后介绍。交互时间超过100~200ms就认为是不好的,因此只能减少MTU来减少延时。
8、IP 首部结构