一个很好的博客:
http://www.cnblogs.com/maybe2030/p/4781555.html#_label3
1.osi七层网络协议
国际标准化组织(OSI)1978年提出了开放系统互联模式参考。将计算机网络结构通信协议分为了七层。即
应用层:应用层直接为用户的应用进程提供服务,是体系结构中的最高层,能够产生网络流量的程序和用户交互。
表示层:在传输之前是否进行加密或则压缩处理。开发人员的工作
会话层:通过netstat -n可以查看会话,服务器和客户机之间进行会话。
运输层:向两个主机上的进程之间的通信提供服务。可以实现可靠/不可靠的通信。还可以实现流量控制。
网络层:负责选择最佳路径 和IP地址规划 组包和分包
数据链路层:透明传输,差错校验,封装成帧。
物理层:定义了网络设备的接口标准。比如,水晶头的标准。
2.ip地址的编址
ip地址的编址分为了3个历史阶段,分别是:
1.分类的ip地址
2.子网的划分
3.构成超网
二级的IP地址为:<网络号:主机号>
A:以0开头,网络号8位,24位主机号。
B:以10开头,网络号16位,16位主机号。
C:以110开头,网络号24位,8位主机号。
D:以1110开头,用于多播。
二级地址时路由表的格式为{目的网络地址,默认子网掩码,下一跳地址}
划分子网的方法是从网络主机号中借用若干为作为子网号,子网地址的格式为:<网络号,子网号,主机号>。划分子网并不改变原来的网络号。划分子网解决了ip地址空间利用率低,两级IP地址不够灵活,给每一个物理网络分配一个网络号会使得路由表变得太大而使得网络性能的变坏。使用子网时,路由器中路由表格式为{目的网络地址,子网掩码,下一跳地址}
无分类编址CIDR消除了传统A,B,C以及划分子网的概念,因而可以更加有效的分配IPV4地址空间。CIDR把32位IP地址划分为2个部分,一部分是网络前缀,后面部分指明主机。IP地址的格式为<网络前缀,主机>,使用CIDR时路由表格式为{目的网络地址,子网掩码,下一跳地址},在路由表匹配时候,使用最长前缀匹配法。
私有ip地址
10.0.0.0-10.255.255.255
172.16.0.0-172.16.255.255
192.168.0.0-192.168.255.255
3.各层之间的中间设备
物理层:转发器
数据链路层:网桥或桥接器
网络层:路由器
网络层以上:网关
4.IP地址与mac地址
IP地址32位,mac地址48位。物理地址是数据链路层和物理层使用的地址,IP地址是网络层以上各层使用的地址,IP地址是一种逻辑地址。MAC地址放在数据链路层的MAC帧的首部,而IP地址放在IP数据包的首部。数据在网络中传输时,MAC地址决定下一跳到那个路由器,而IP地址决定最终的目的地,数据包没经过一次路由器,其mac帧中的目的地址和源地址就要发生改变,其mac帧中的目的地址是根据路由器的路由表找到其要到的ip地址,找到下一跳后,通过地址解析协议ARP返回下一跳的mac地址。
网络链路上传送的帧最终要按照mac地址到底目的主机,那为什么还要使用ip地址呢?这是由于不同厂商产出的网卡中mac地址不统一,不同的mac地址格式之间进行转化很难,但是统一的ip地址就把这个问题解决了。
5.ARP地址解析协议
网络层使用ip地址,实际网络链路上传送数据时,最终还是使用网络的硬件地址,但是IP地址和MAC地址并不简单的是映射关系,如何从IP地址得到MAC地址,就要使用ARP。地址解析协议ARP解决这个问题的方法是在主机ARP高速缓存中存放一个从IP地址到硬件地址的映射表,并且这个映射表还时常动态更新。
每一个主机都设有一个ARP 高速缓存,里面有本局域网上各个主机和路由器的IP地址到MAC地址的映射表。
ARP是解决同一个局域网上的主机和路由器的IP地址和MAC地址映射的问题。主机A想要知道主机B的物理地址,ARP工作详情如下:
1):主机A查看自己ARP缓存是否有主机B的IP地址,如有,查找完成。没有,则进行下面步骤
2):主机A上的ARP进程在本局域网广播发送一个arp请求分组,arp请求分组的内容为:我的ip地址是XXXX,我的物理地址是XXXXXX,我想知道ip地址为XXXX的物理地址是多少
3):本局域网上所有主机上运行的arp进程收到了此ARP请求分组。
4):主机B在请求分组中看到了自己的Ip地址,就向A发送ARP响应分组,并写入自己的硬件地址,其余主机不理睬这个arp请求分组。同时,B主机将a的硬件地址和物理地址也写入自己的arp缓存中。arp响应分组内容为:我的IP地址是XXXX,我的mac地址是XXXXXX。arp响应分组是普通的单播,而arp请求分组是广播。
5):主机A收到了响应分组后,将B的信息写入ARP缓存中。
arp缓存需要设置一个生存时间,超过生存时间的项目就从缓存中删除掉。
6.ICMP网际控制报文协议
为了更有效转发IP数据报和提高交付成功的机会,在网际层使用ICMP。icmp允许主机或路由器报告差错和提供有关异常情况的报告。
ICMP报文类型有2种:ICMP差错控制报文和ICMP询问报文。
ping命令使用了ICMP回送请求与回送回答报文(echo),ping命令后面键入多播地址,将永远收不到响应,这是由于多播数据报不产生ICMP差错报文。
7路由选择协议
路由选择协议主要是2大类:
1):内部网关协议IGP
2):外部网关协议BGP
内部网关协议主要有路由信息协议RIP和开放最短路径优先OSPF。
rip协议的特点是 仅和相邻的路由器交换信息,路由器交换的信息是当前路由器所知道的全部信息,按固定的时间间隔交换路由信息。RIP协议好消息传播的快,坏消息传播的慢,rip协议实现简单,开销较小。
OSPF底层使用的是最短路径优先算法。
外部网关协议BGP,配置BGP的时候,每一个AS的管理员要至少选择一个路由器作为该AS的BGP发言人,一般来说,两个BGP发言人都是通过一个共享网络连接在一起的,一个BGP发言人与其他as的BGP发言人交换路由信息,要建立TCP连接。
8.NAT网络地址转换
NAT用于专用网内部的一些主机已经分配了私用IP地址,而这些主机又想和因特网上的主机通信,在所用使用本地地址的主机和外界通信时,都要在nat路由器上将其本地地址转换成全球IP地址,才能和因特网连接。 专用网内部的主机不能充当服务器使用,因为因特网上的客户无法请求专用网内的服务器提供服务。
9.tcp和udp的区别
10.tcp和udp报文段的首部格式
udp:共八字节,源端口,目的端口,长度,校验和。udp中校验和和ip数据报的校验和只校验首部数据不同,其把首部和数据部分一起校验。
tcp:tcp的首部格式对tcp的可靠服务有很大的联系。只列出最重要的几部分,详情见计算机网络书P194页。
1)序号:4字节,范围为[0,2^32-1],当序号增大到最大时,下一个序号又返回0。tcp是面向字节流的,每一个字节都按着顺序编号。
2)确认号:4字节,期望收到对方下一个报文段的第一个数据字节的序号。若确认号为N,则表明 到序号N-1为止的所有数据都已正确收到。
3)6个控制位
紧急URG:URG = 1便是紧急指针字段有效,表明此报文段的数据需要紧急发送,有很高的发送优先级。
确认ACK:ACK=1时,确认号字段才有效,当tcp连接后,所有传送的报文段都必须把ACK置1
推送PSH:两个进程通信时,另外一个进程希望在键入一个命令后立即收到对方的响应,就需要PSH。
复位RST:连接出现严重错误,需要释放连接,重新建立连接。
同步SYN:建立连接时使用同步序号,SYN=1,ACK=0时,表明这是一个连接请求报文段。对方同意连接,则在响应的报文段中是SYN=1,ACK=1。
终止FIN:当FIN=1时,表明要释放一个连接。
4)窗口。2字节 窗口值[0,2^16-1]。窗口是指的发送本报文段的一方的接收窗口,并不是自己的发送窗口。
窗口字段明确指出了现在允许对方发送的数据量。窗口值是经常动态变化的。窗口值作为接收方让发送方设置其发送窗口的依据。
5)紧急指针。2字节,指出本报文段中紧急数据的字节数,即使窗口为0也要发送紧急数据。
11.tcp连接建立
客户机A与服务器B建立tcp连接的过程如下:
1) 最初2端TCP进程都属于CLOSED状态,A主动打开连接,B被动打开连接
2)A向B发出连接请求报文段,将tcp报文中首部的SYN=1,ACK=0,序号假设seq=x。这时,tcp客户进程进入同步已发送状态(SYN-SENT)
3)B收到连接请求报文段后,如果同意建立连接,则向A发送确认。在确认报文段中将ACK=1,SYN=1,确认号ack=x+1,序号seq=y。服务器进入同步已收到状态(SYN-RCVD)
4)A收到B的确认后,客户机进入已建立连接状态(ESTABLISHED),还要给B发出确认。 确认报文段将ACK=1, 确认号ack=y+1,序号seq=x+1。B收到A的确认后,进入已建立连接状态(ESTABLISHED)
12.tcp建立为什么需要3次握手,为什么客户机还需要向服务器发送一次确认呢?
考虑这样一种情况,若A向B发出连接建立请求,由于网络堵塞延迟到达B。在延迟到达期间,A由于超时便进行重发,此时,B便和A建立起了TCP连接。当延迟的建立请求最终到达B时,便需要再建立一次tcp连接,由于这时候A并没有发出请求,B却一直在等待A发来数据,B的资源就这样浪费了。
13.tcp连接的释放
数据传输结束后,通信的双方都可以释放连接。
1)A把连接释放报文段的首部FIN=1,假设其序号seq=u,这时A进入终止等待1的状态(FIN-wait-1),等待B的确认。
2)B收到连接释放报文段后,发出确认,其ack=u+1,seq=v,ACK=1。此时B进入光比等待状态(close-wait)。
此时TCP连接进入半关闭状态,A已经没有数据要发了,但是B可以发送数据,A仍要接收
A收到B的确认后,进进入终止等待2状态(fin-wait2),等待B发出连接释放报文段。
3)若B已经没有向A发送数据了,进程通知TCP释放连接。B设置报文段FIN=1, ACK=1, seq=w, ack = u+1。B进入了最后确认状态(LAST-ACK)。
4)A收到B的连接释放报文段后,必须对此发出确认。在确认报文段中设置ack=w+1,seq=u+1,然后a进入时间等待状态(time-wait)。B收到确认报文段后,进入CLOSE状态。
请注意,现在TCP连接还没有释放掉,必须等待时间等待计时器设置时间2MSL后,A才进入CLOSED状态。B结束TCP连接的时间要比A早一些。
14.为什么A在TIME-WAIT状态必须等待2MSL时间呢?
第一:为了保证A发送的最后一个ACK报文段能够到达B。
第二:防止已经失效的连接请求报文段出现在本链接中。A发送最后一个ACK报文段后,再经过时间2MSL后,就可以使得本链接持续时间内所产生的报文段从本网络中消失。
15.tcp实现可靠传输
tcp实现可靠传输的基本模型为停止等待协议。“停止等待”就是每发送完一个分组就停止发送,等待对方确认,在收到确认后再发送下一个分组。如果发送方一段时间没有收到确认便进行重传。停止等待协议信道利用率太低,为了提高传输效率,发送方可以流水线的传输分组。接收方一般使用累积确认的方式。接收方不必没收到一个分组就发送确认,而是收到几个分组后,对按序到达的最后一个分组发送确认。
16.tcp实现流量控制
如果发送方数据发送的过快,接收方可能来不及接收,这就会造成数据的丢失。流量控制就是让发送方的发送速率不要太快,要让接收方来得及接收。
接收方利用可变窗口进行流量控制。
17.tcp的拥塞控制
拥塞控制就是防止过多的数据注入到网络当中,这样就可以使得网络中的路由器或链路不至过载。拥塞控制是一个全局过程,涉及到所有主机,所有的路由器以及降低网络传输性能有关的所有因素。拥塞控制和流量控制容易混淆,原因是某些拥塞控制算法是向发送端发送控制报文,并告诉发送端,网络已经出现麻烦,必须放慢发送 速率。但是呢,流量控制是个端到端的问题,而拥塞控制是个全局性的问题。
拥塞控制算法:
1)慢开始和拥塞避免:发送方维持一个拥塞窗口,拥塞窗口大小取决于网络的拥塞程度。发送方让自己发送窗口等于拥塞窗口,如果考虑到接收方接收能力,还要时发送窗口为拥塞窗口和接收窗口中的最小值。
图中 ssthresh为慢开始门限,在拥塞出现的时候该值会重新设置。
2)快重传和快恢复
快重传:发送方一连收到三个重复确认就应当立即重传对方尚未收到的报文段,而不必等待该报文段的重传计时器到期。
快恢复:当出现拥塞是,不讲窗口设置为1,而是设置到新的ssthresh的值。
3)随机早起检测RED
和网络层相关,最主要的是改变路由器的分组丢弃策略。
19.应用层各种协议
1)域名系统DNS:域名系统DNS用来把便于人们使用的机器名字转化为ip地址。因特网的域名系统DNS被设计成一个联机分布数据库系统,采用客户服务器方式。dns使用udp进行传输,端口为53号。windows下想要查看本地dns缓存 使用ipconfig /displaydns命令。
2)文件传送协议FTP:进行文件传输时,FTP的客户和服务器之间要建立2个并行的tcp连接:“控制连接”和“数据连接”。控制连接在整个会话期间一直打开,控制连接并不用来传送文件。实际用于传输文件的是”数据连接“。控制连接使用21号端口,数据连接使用20号端口。
3)telenet协议:又称为终端仿真协议。
4)DHCP协议:DHCP使用客户服务器方式。DHCP主要是应用于管理,分配IP地址。