一、网络协议模型
1.OSI七层网络协议模型 OSI七层协议(OpenSystem Interconnection):将网络连接过程分成数个层次(layer),每个层次负都有特定的独立功能,且每个层次的程序代码可以独立撰写,每个层次间的功能不会相互干扰。 说明: 1)越接近硬件的层次为底层(layer1),越接近应用程序的则为高层(layer7) 2)接收端或者发送端,每一层只认识对方的同一层次的数据 3)每层都有其独特的头部数据header,告知对方信息,其后的数据为真实数据 (1)物理层Physical Layer 定义传输设备的电压与信号等,连接数据帧转换成比特流的编码方式,最后连接实际传输介质发送/接收比特信号 (2)数据链路层Data-Link Layer 下层为实体的定义,上层为软件封装的定义。数据链路层又可分为两层: 偏向硬件介质:MAC数据帧,media Access Control frame,网络接口所能处理的主要数据包裹,被物理层编码成比特流 偏向软件层面:逻辑链路层(LogicalLink Control)多任务处理来自上层的数据包数据并转换成MAC格式 信息交换、流量可控制、数据问题处理 (3)网络层Etwork Layer 定义IP(InternetProtocol)和路由概念,计算机间的连接建立、终止和维持,数据包的传输路径选择 (4)传输层Transport Layer 发送端和接收端连接技术,如TCP、UDP… 包括数据包格式、数据包发送、流程的控制、传输过程的帧检测与重新传送 (5)会话层Session Layer 定义两个四肢间的连接信道的连接与中断,在确定网络服务建立连接的确认 也可以建立应用程序的会话、提供其他加强型服务 (6)表示层Presentation Layer 网络服务(或程序)之间的数据格式转换:将来自本地端应用程序的数据格式转换或重新编码成网络的标准格式 加密解密技术 (7)应用层Appliation Layer 应用程序并不属于应用程序本身,用来同一管理调度数据对应其发送和接收的应用程序 定义应用程序如何进入该层的沟通接口,以将数据接收或发送给应用程序,最终展示给用户
2.TCP/IP协议 TCP/IP协议在OSI七层协议的观念上进行简化为四层结构,在结构上没OSI七层协议严谨,但时程序撰写上会容易得到广泛使用。 TCP/IP协议将应用层、表示层、会话层整合为应用层 应用层:将数据封装一个TCP/IP协议组内某个特定使用到的协议,交由传输层处理 传输层:放入TCP封装内,并给予TCP封装的首部报文,交由网络层处理 网络层:封装IP数据包内,给予IP首部,交由网络接口层处理 网络接口层:MAC封装,比特流传输
3.网络模型对应层级关系 OSI七层协议只是一个参考模型,过于详细阐述网络出书各方面情况,实际生产中为TCP/IP协议
二、网络层:IP协议 1.IP协议 (1)IP协议版本 IPv4:32bits分为四段,点分十进制表示,8bits.8bits.8bits.8bits 每8bits表示用以数字0-255标识 00000000.00000000.00000000.00000000 ===》 0.0.0.0 11111111.11111111.11111111.11111111 ===》 255.255.255.255 IPv6:128bits二进制 (2)IP(Internetprotocol)地址:网络号+主机号 在同一物理网段内,主机的IP具有相同的网络号,并具有独特的主机号;同一网段内的主机其主机号不能相同 注意: 1) 同一网段内,网络号不变,主机号不能重复 2)全0表示为整个网段的地址,全1表示为广播地址 (3)IP地址分类: A类: 第一段为网络号,后三段为主机号 网络号:0000 0000 - 0 111 1111:1-127 网络数量:126,127 每个网络中的主机数量:2^24-2 默认子网掩码:255.0.0.0,/8 用于与IP地址按位进行“与”运算,从而取出其网络地址; 1.3.2.1/255.0.0.0= 1.0.0.0 1.3.2.1/255.255.0.0=1.3.0.0 私网地址:10.0.0.0/255.0.0.0 B类: 前两段为网络号,后两段为主机号 网络号:1000 0000 - 10 11 1111:128-191 网络数:2^14 每个网络中的主机数量:2^16-2 默认子网掩码:255.255.0.0,/16 私网地址:172.16.0.0-172.31.0.0 C类: 前三段为网络号,最后一段为主机号 网络号:1100 0000 - 110 1 1111:192-223 网络数:2^21 每个网络中的主机数量:2^8-2 默认子网掩码:255.255.255.0, /24 私网地址:192.168.0.0-192.168.255.255 D类:组播的特俗公用 1110 0000 - 1110 1111:224-239 E类:保留 240-255 总结: Class A:0.xx.xx.xx~ 127.xx.xx.xx,私有地址10.0.0.0 ~ 10.255.255.255 Class B:128.xx.xx.xx ~ 191.xx.xx.xx,私有地址172.16.0.0~ 172.31.255.255 Class C:192.xx.xx.xx ~ 223.xx.xx.xx,私有地址192.168.0.0~ 192.168.255.255 Class D:224.xx.xx.xx ~ 239.xx.xx.xx Class E:240.xx.xx.xx ~ 255.xx.xx.xx 注意:Loopback IP网段 lo网络,当初被用来作为测试操作系统内部循环所用的一个网络,同时还能提供系统内部原本就需要使用网络接口的服务所使用。为内部循环网络,无需安装网卡使用,其地址号为127.0.0.0/8,默认的主机IP是127.0.0.1,即为localhost
2.Netmask子网掩码 将一个大的网段地址划分成更小的网络地址,减少网段内的主机数量,使得更加方便管理,以及广播时效率提高 方式:通过将一位或多位主机号当做网络号来使用,将网络号全部表示为1,主机号全部用0标识来进行子网划分
3.ip报文首部( 每行占用的位数为32bits) (1)IP Version:声明ip数据包的版本,ipv4、ipv6 (2)IHL:Internet Header Length,ip报文首部长度,以4字节为一个单位来记录IP报头的长度 (3)TOS:Type Of Service,服务类型,通过定义来标识IP数据包的优先级、延迟、传输量和可靠度等信息 (4)Total Length:IP数据包的总长度,包括报头和数据部分、用16个字节表示0-65535bytes (5)Identtification:标识信息,辨识数据段是否为一个数据 (6)Flags:特殊标志R、DF、MF,内容可以标识为"0DM" D:0表示可以分段,1表示不可以分段 M:0表示此IP为最后分段,1表示非最后分段 (7)Fragment Offset:分段偏移量,用以标识这个IP分段在原始的IP数据包中所占的位置,类似于序号作用 (8)Time To Live:存在时间,最多255次转发,每次经过一个路由器减一到0丢弃不再转发 (9)Protocol Number:报文协议代码(TCP--6、UDP--17、ICMP--1、IP--4… ...),数字描述; (10)Header Checksum:报头首部校验码,用于检测IP报头是否存在错误 (11)Source Address:来源IP地址 (12)Destination Address:目标IP地址 (13)Options:填充位,提供包括安全处理机制、路由记录、时间戳、严格与宽松的来源路由等 (14)Data:真实数据
三、传输层:TCP协议 1.TCP报文首部 (1)Source Port:源端口号 (2)Destination Port:目标端口号,通过16位字节标识0-65535共65536个端口 (3)Sequence Number:数据包序列号,TCP数据分段 (4)Acknowledgement Number:回应序列号 一次发一批报文时候使用序列号和确认号,TCP三次握手的第一次无确认号 (5)Header Length:首部长度 (6)Reserved:保留位(6位); (7)Code:control Flag,标志控制码 该字段有6个bits组成,每个bits标识一种含义,用以说明这个连接的状态,让接收端连接这个数据包的主要动作 URG(Urgent):1标识为紧急数据包,接收端要紧急处理,且Urgent Pointer字段也会被启用 ACK(Acknowledge):1表示为响应数据包,和Acknowledeg Number有关 PSH(Push Function):1表示要求对方立即传送缓冲区内的其他对应数据包,无需等待缓冲区满才传送 RST(Reset):1表示强制结束连接,且发送端已经断线 SYN(Synchronous):1表示发送端希望双方建立同步处理(要求建立连接),主动要连接到对方 FIN(Finish):1表示传输结束 (8)Window Size:窗口滑动,用来控制数据包的流量,0表示缓冲器已经额满,所以应该暂停数据传输 (9)TCP Checksum:确认校验码 (10)Urgent Pointer:紧急数据 (11)Options:填充位,可变长度,多数情况不使用 (12)Data:数据
2.TCP协议三次握手机制 Three-way handshake:TCP在建立连接之前都必须要通过的三个确认动作 (1)第一阶段:数据包发起 1)随机取用大于1024的端口,监听用于和应用程序通信 2)TCP报头:SYN=1,表示要求建立连接,,主动连接到对方 3)TCP报头:Sequence Number(Client)记录下第一次发送出连接数据包给服务器端的序列号 (2)第二阶段:数据包接收和确认数据包传送 1)服务器端接收到数据包,并确认所接收的数据包 2)回应数据包:TCP报头中 SYN=1,ACK=1,表示主动连接且为响应数据包 Acknowledgement Number(Service)=Sequence Number(Client) + 1,给客户端确认使用 Sequence Number(Service)新数字,用于确认客户端确实可以收到服务器端的数据包 3)等待客户端响应 (3)第三阶段:回送确认数据包 1)确认收到报文的Acknowledgement Number(Service)是否为Sequence Number(Client) + 1 2)再次发送数据吧:ACK=1,AcknowledgementNumber(Client)=Sequence Number(Service) + 1 (4)第四阶段:取得最后确认 服务器端验证
|