OSI(Open System Interconnection)由ISO(international Organization for Standardization)定义的网络分层模型。物理层(比特流传输),数据链路层(介质访问(介质访问控制(medium access control)简称MAC。 是解决当局域网中共用信道的使用产生竞争时,如何分配信道的使用权问题)、链路管理)传输的单位是帧,网络层(寻址、路由选择)传输包,传输层(建立端到端的连接)传输segment,会话层(建立维护管理会话)Session PDU(SPDU),表示层(对数据格式处理、加解密)Presentation PDU(PPDU),应用层(提供应用程序通信)APDU。每个对等层传输的单位是PDU(Protocal Data Unit) 。
物理层:定义了所有电子及物理设备的规范,为上层的传输提供了一个物理介质。规范有EIA/TIA RS-232串口规范、EIA/TIA RS-449、RJ-45网络接口规范等,实际使用的设备如网卡属于本层。
数据链路层:对比特流进行数据成帧(对比特流加上一定的格式),实现无差错数据传输,规范有:SDLC、HDLC、PPP、STP、帧中继等。switch交换机属于本层。
网络层:路由选择、分组、重组,协议有:IP、IPX、RIP、OSPF、ICMP、IGMP,路由器属于本层。
传输层:可检测路由器丢弃的包,并产生重传请求,将乱序包重新排序。
表示层:对网络传输的数据进行交换,使得多个主机间传送的信息能互相理解,包括数据压缩、加密、格式转换等。
应用层:HTTP、HTTPS、FTP、TELNET、SSH、SMTP、POP3等。
TCP/IP四层模型:链路层(ARP物理地址转换为IP地址、RARP),网络层:IP、ICMP、IGMP,传输层:TCP、UDP,一组协议的集合。
对等通信:同层间进行通信(虚电路)。
封装(Encapsulation):用户数据加头,App首部,TCP首部(20字节),IP首部(20),以太网首部(14)及尾部(4)。分用(Demultiplexing)(解封),TCP/UDP根据端口号进行解封,找到对应程序。
端口:Well Known Ports(0-1023),Registered Ports(1024-49151),Dynamic or Private Ports(或称临时端口)(49152-65535),但一般是从1024起分配动态端口。IANA(The Internet Assigned Numbers Authority,互联网数字分配机构)。
以太网和IEEE802.3对数据帧长度都有限制,其最大值分别是1500和1492字节,即MTU(Maximum Transmission Unit)。如果IP层有一个数据报要传,而其长度大于MTU,这里IP层就要进行分片(Fragmentation)。当网络上两台主机互相进行通信时,要经过多个网络,每个网络的链路层可能有不同的MTU,其中最小的MTU被称作路径MTU。
以太网帧格式:以太网头部(6目的地址6源地址2类型共14字节,地址是IP地址)。应用层识别的是物理地址(要将逻辑地址IP转成MAC),帧可以是IP数据报,ARP、RARP数据,为区别加了类型。数据长度46~1500,最后是4个字节的CRC校验。如果帧传输的是ARP/RARP,结构就成数据不同。
ICMP协议用于:传递差错信息、时间、回显、网络信息等控制数据。如果发送数据的主机通过设定的IP,找不到对应的MAC地址,这时会反馈给源端即发送端,就是通过封装成ICMP的格式反馈的。如果数据大小超过MTU,但设置不分片,这时也会通过ICMP协议来通知此类错误(差错信息)。ping就是通过把数据封闭成ICMP协议来实现的。ICMP加上IP头(20字节)就成了IP数据报文。ICMP报文格式:类型8,代码8,校验16+数据。如类型和代码全设置为0时,就是回显应答(Ping应答)。
ARP:先在本地缓冲区查找有无映射,如果无会发出广播请求包给网络上每台主机,每台主机收到后上传到网络层,如果不是给自己的就丢弃,如果是就回复ARP请求,并把源MAC加入到ARP缓冲区中,源收到回复包并往本地ARP缓冲区中加入此条目,两者都相互有对方MAC地址。
Ping过程:a.DNS;b.发送ICMP的ECHO包;c.源ARP;d.目标主机的ARP向源发送ARP的响应;e.源在IP层发送ICMP包;f.目标在IP层发送ICMP响应包;g.接收目的的ICMP响应包。
RARP:一般用在无盘工作站(只知道MAC地址,没有硬盘,无法将IP保存在配置文件中,主要一般把IP地址保存在配置文件中),使用时会向“RARP服务器”(事先保存好无盘工作站MAC与IP的对应关系)发送一个请求。
IP数据报格式:版本4位,首部长度4(最大60字节(4字节为一单位),最小20个字节),服务类型8,总长度(包括头部与数据)16(以字节为单位),——标识16,标志3,片偏移13(用于分组后重组),生存时间TTL8,协议类型8,头部校验和16,源IP32,目的IP32,选项32,填充(未知),数据。 服务类型(TOS):3位优先权现已忽略,4位表服务类型(DTRF),1位保留。标识:用来标识一个IP包,每发送一个此值加1,到65535时又重0开始,如果分片,各分片共享同一个标识。标志:第一位不用,第二位表DF(Don't Fragment)如果不1表不分片,大于MTU时该数据报会被丢弃,并发送一个ICMP差错报文。第三位MF(More Fragment)如果为1表明后续有分处,最后一片MF为0。分处后每组都有自己的头部,但片偏移值 不同,通过此值接收端可以重组。 TTL(Time To Live)表最多经过路由器的数量,每过一个TTL减1,为0时丢弃,并发送ICMP报文通知源主机,可避免数据报在路由器间不断循环。协议类型:知道交给上层的哪个协议处理有ICMP,IGMP,TCP,UDP。 头部校验和:不包含数据校验,因为其上层已经对数据进行检验了,且每经过一个路由器数据部分不变,只有头部变化,因此只要对头部进行校验,为减少计算时间,一般不用CRC校验,而是用简单的网际检验和。 选项与填充包括:路径记录、时间戳,宽松的源站路由及严格的源站路由。 网际校验和(Internet Checksum):https://blog.csdn.net/microtong/article/details/3112139 http://tieba.baidu.com/p/4895653523?red_tag=n3568459554,不是完备的,只是初步校验,可能错两个,负负得正。
路由:搜索匹配的主机地址、网络地址、默认表项。源IP与源子网掩码与运算,目的IP与源子网掩码与,相等说明在同一网段,通过直接路由即可,不等就用间接路由,先查询本地路由表,找到就行,找不到就找网络地址,还找不到就找默认网关,还找不到就失败了,找到后就可以ARP了。
TCP特点:基于字节流、面向连接、可靠(也是网际校验和)、缓冲传输、全双工、流量控制(窗口机制)。
TCP是流式的,建立后可以一直发送并没有明确的边界,而UDP发送的时候,是可以按照一个个数据包发送的,一个数据包就是一个明确的边界。发送端发送的数据是发送的缓冲区中,每过一段时间才发出去,发送端、接收端都可能会出现此情况,也可能是一个大包填充缓冲区填充满了,但包还没发完即不完整粘包,剩余数据会在下次发送是补上。
流量控制:如果发送方把数据发送得过快,接收方可能会来不及接收而造成数据丢失,TCP的流量控制是利用滑动窗口机制实现的,接收方在返回ACK中会包含自己的接收窗口大小,以控制发送方的数据发送。https://blog.csdn.net/seu_calvin/article/details/53198282
TCP报文格式:源端口号16,目的端口16,序列号32(这个报文段中的第一个数据字节序号),确认号32,头部长度4,保留6,标志位6,窗口16,检验和16(头部加数据部分),紧急指针(16),选项32,数据。序号表示这个报文段中的第一个数据字节序号。确认号:仅当ACK标志为1时有效,表期望收到下一个字节的序号。6个标志位:URG紧急指针有效,ACK确认序号有效,PSH接收方应尽快将这个报文段交给应用层,RST连接重置,SYN同步序号用来发起一个连接,FIN将终止一个连接。紧急指针:一个正的偏移量,与序号字段中的值相加表紧急数据最后一个字节的序号,是发送端向另一端发送紧急数据的一种方式,如telnet中按Ctrl+C结束连接,发送的也叫“带外数据”。常见选项有MSS(Maximum Segment Size,最长报文大小),每个连接方通常都在通信的第一个报文段中指明这个选项,它指明本端能接收的最大长度的报文段,如果不设置默认为536(20+20+536=576,路由器经常是576)。
连接三次握手:连接方A:SYN a(发送的是TCP段,SYN是标志位,置为1表发起连接),接收方B:SYN b ACK a+1(收到时,也发起一个连接),A:ACK b+1。 四次挥手:可由双方任意一方发起,如由A发起,A发出FIN x,ACK y(即调用close),当A到B发起终止请求时,B从内核级立即响应,但要结束从B到A的连接(即B从应用级调用close)时,中间会有个时间差。
TCP保证数据可靠性:不可靠包括:差错(校验和),丢包(超时重传+确认),失序(seq),重复(seq)。TCP发出一个段后,会启动一个定时器,等待目的端确认收到这个报文段,如果不能及时收到一个确认,将重发这个报文段。当TCP一端收到另一端的数据时,它发将一个确认,但不是立即发送,而是推迟几分之一秒(如果有数据,就可以和这个确认一起发送提高效率)。如果校验和有差错,将丢弃此报文段且不确认(导致对方超时重传)。TCP连接的每一方都有一定大小的缓冲空间。
滑动窗口协议即可用于链路层(以帧为单位确认的),也可用于传输层(以字节为单位)。发送和接收方都有各自的窗口大小,在刚连接的时候就会告知对方。MSS与发送和接收窗口大小无关,后者用于流量控制,前者用于IP层数据分片。MSS一般要小于MTU-20-20,通常发送窗口大小与接收相等。 首先应用层生成数据放在发送窗口中,如果数量超过窗口容量则应用层会阻塞,发送窗口太小,发的慢整体传输效率低,发送窗口太大,接收窗口跟不上就会导致数据丢失进而导致发送端重传,从而加重网络负担。当数据已发送且被确认后,窗口就移过去了,还有已发送未确认(确认后窗口会后移)及可发送的情况。 由于数据不是按顺序传输的,到达接收窗口的次序可能乱掉,假设接收端滑动窗口在4~12,当第一个达到数据6时,会被接收但不会被确认,因为期望的是序号为4的段,当4到达时才会开始确认,但有个“累积确认机制”,即虽然4到达了但不会立即确认,因为这样太慢了,而是4、5、6等更多数据一起确认,这样只对序号为6的确认一次即可,即返回ACK=7。其他机制如:通告接收窗口(rwnd):预防应用程序发送的数据超过对方的缓冲区,接收方使用的流量控制;拥塞窗口(cwnd):(包括路由在内适应整个网络的能力)预防应用程序发送的数据超过网络所能承受的能力,发送方使用流量控制;发送窗口取两者较小值。 慢启动阈值ssthresh(slow start threshold),慢启动阶段:cwnd从1开始按指针增长到ssthresh,拥塞避免阶段:cwnd按线性增长,直到拥塞,将cwnd=1,ssthresh减半,再重新开始这个过程。由于ACK直接由TCP协议栈回复,默认无应用延迟,缓冲区中不存在“已接收未回复ACK”的情况。滑动窗口协议用于网络数据传输时的流量控制,以避免拥塞的发生,该协议允许发送方停止并等待确认前发送多个数据分组,由于发送方不必每发一个分组就停下来等待确认,因此该协议可加速数据的传输。慢启动是一种TCP拥塞控制机制,基本思想是TCP开始在网络中传输数据或发现数据丢失并开始重发时,首先慢慢的对网络实际容量进行试探,避免由于发送了过量的数据而导致阻塞。慢启动为发送方TCP增加了另一个窗口:拥塞窗口,初始为1个报文段,每过一个RTT将拥塞窗口指数增长直到发生一个丢包事件,此时拥塞窗口值将被降为一半,发送取拥塞窗口与通告窗口的最小值为上限。https://blog.csdn.net/u013616945/article/details/72835063。
UDP效率更高,因为其头部比TCP更简单且无确认重传机制。
UDP报文格式:源端口16,目的16,数据长度16,校验和16,数据。
网友评论