计算机网络协议

浅谈网络协议

网络协议模型通常有OSI七层模型、TCP/IP模型、五层模型。
OSI是ISO组织定义的国际化标准,但并不实用,一般只用于学习。TCP/IP模型是事实上的标准,当前主流应用一般都使用此模型。
TCP/IP模型分为四层:应用层、传输层、网际层、网络接口层,五层模型则在TCP/IP模型基础上将网络接口层细分为数据链路层和物理层,此处使用五层模型。

1、物理层为传输载体,有双绞线、光纤、同轴电缆。双绞线一般用于局域网,光纤一般用于远距离传输,同轴电缆可用于局域网,但基本已被双绞线取代,现在用于有线电视线路。
信道复用技术有:时分复用、频分复用、波分复用、码分复用。

2、数据链路层在物理层之上,PPP协议是目前应用最广泛的数据链路层协议,PPP非常简单,接收方每收到一个帧,就进行CRC校验,如正确则收下,反之则丢弃这个帧。数据的表示方式有归零制、不归零制、曼切斯特编码,差分曼切斯特编码。
早期有以太网共享协议CSMA/CD,将许多站点接到一根总线上,CSMA/CD(Carrier Sense Multiple Access/Collision Detection)是以半双工方式运行(发送和接收不能同时进行)。载波监听就是发送前先监听,发送前要检测总线上是否有其他站点在发送数据(如果有则等空闲时再发);碰撞检测就是边发送边监听,适配器边发送数据边检测其他站点是否也在发送数据,如果发现有其他站点也在发送数据(同时只能一个站点发),则立即停止发送,等待空闲后再发送,CSMA/CD协议要求发送时延至少要两倍的传播时延才能保证冲突检测。以太网有效帧长度为64~1518字节,大于或者小于有效长度的帧会被直接丢弃。现在一般使用交换式集线器,也就是常说的交换机。

3、网络层的两大主要功能为分组转发和路由选择,分组转发是路由器根据转发表将接收到的分组从某个接口转发出去,路由选择是网络层决定转发路径的过程(内部网关协议RIP、OSPF,外部网关协议BGP、)。
IP协议是网络层的重要协议,网络层还有其他辅助协议,如ARP,RARP、ICMP、IGMP。IPV4为32位二进制数,一般使用点分十进制来表示,IPV6为128位二进制数。IP地址由网络部分和主机部分组成,例如在192.168.0.1/24中,网络地址为192.168.0.0,主机号为1。
一些特殊的IP地址不能分配给主机:网络地址和主机号全为0表示为本网络上的本主机(0.0.0.0),主机地址全为1的地址表示该网段的广播地址。本地专用网段地址有:10.0.0.0-10.255.255.255、172.16.0.0-172.31.255.255、192.168.0.0-192.168.255.255,IP协议会将大于MTU大小的数据报分成多个数据报发送,到达目的地后再组装。
ARP协议的作用是获取IP地址对应的Mac地址。路由器转发IP数据报的过程基本如下:提取目的IP地址D,对路由器各个网络的掩码与D相与(AND位运算),如结果与网络地址匹配,则直接交付。否则查询路由表中的每一行(目的网络地址、掩码、下一跳、接口),用其掩码与D相与,结果与网络地址匹配则交付。如果路由表查询完毕还未找到则查看是否有默认路由,有则转发至默认路由,没有则报错。知道IP地址但不知道物理地址无法到达,所以需要ARP来完成这个工作 ,如果ARP表中找不到某个IP的MAC地址,则会发送一个广播,由该IP主机回应。
ICMP协议,ICMP差错报告报文有五种:终点不可达、源点抑制、超时、参数问题、改变路由(重定向),Windows系统常用的Ping命令使用的就是ICMP报文。可以使用Wireshark抓取各个协议数据包和使用Cisco Pakcket Tracer模拟网络连接。

4、传输层在网络层之上,主要协议有TCP和UDP,TCP协议需要先建立连接,有分段机制滑动窗口机制(分为可用部分,已发送未确认部分,已发送部分)、流量控制、拥塞控制(发送速率慢慢增加,遇到网络拥塞立即停止发送)等功能。TCP会将过大的数据包分段发送(在建立连接时会沟通MSS大小),这样IP协议就不用再分片重组。使用Nagle算法会产生粘包现象(数据包太小时会与接下来到达的数据包合并为一个大的数据包发送)。因为这些现象需要对TCP接收到数据包进行拆包和判断是否接收完毕,通常的做法有:固定TCP数据包长度或者将数据包分为头部+数据,头部存储数据包总长度*,TCP是一种可靠地传输层协议。
UDP基本没有对IP数据报做处理,所以可能会产生包顺序错乱和丢包现象(数据报分片发送,每个数据帧选择的路由线路可能不同就会产生顺序错乱,路由器缓存区满了就会产生丢包现象)。UDP不需要合并数据段,这个工作由IP协议完成,可在应用层实现数据包分段,增加应答、重传等机制实现可靠UDP(如KCP协议)。

5、应用层协议有很多,例如DNS域名解析、FTP文件传输、DHCP动态主机配置、HTTP超文本传输等。可以使用Socket实现自己的应用层协议参考C#实现

你可能感兴趣的:(计算机网络协议)