diff --git "a/Part4/Network/\350\256\241\347\256\227\346\234\272\347\275\221\347\273\234\345\237\272\347\241\200\346\261\207\346\200\273.md" "b/Part4/Network/\350\256\241\347\256\227\346\234\272\347\275\221\347\273\234\345\237\272\347\241\200\346\261\207\346\200\273.md" new file mode 100644 index 0000000..e4797a3 --- /dev/null +++ "b/Part4/Network/\350\256\241\347\256\227\346\234\272\347\275\221\347\273\234\345\237\272\347\241\200\346\261\207\346\200\273.md" @@ -0,0 +1,207 @@ +#计算机网络体系分类: +计算机网络整个体系有两个大的分类:一个是国际组织制定的OSI七层模型,一种是实际使用中的TCP/IP四层模型。 + +|OSI七层模型 |TCP/IP四层模型| +|----|----| +|应用层|| +|表示层|应用层| +|会话层|| +|传输层|传输层| +|网络层|网络层| +|数据链路层|物理接入层| +|物理层|| + +#物理层: +物理层主要是实现主机和网络之间的物理连接,规定一些与传输媒体接口有关的一些特性。 + +##通信方式: +- **单工通信:**只能由A主机向B主机发送消息,通信是单向的。 + +- **半双工通信:**同一时间只能是由A主机向B主机或者是B主机向A主机发送信息,不能同时发送消息。 + +- **全双工通信:** A主机和B主机可以实现在同一时间内既接收消息,又发送消息,极大的提升了通信效率。 + +##常见引导型传输媒体: +###双绞线: +分为屏蔽双绞线(STP)和非屏蔽双绞线(UTP),屏蔽双绞线就是在非屏蔽双绞线外边又加了一层屏蔽层 + +tips:为什么双绞线要两根线绞起来,两个线绞起来可以有效的减少相互之间的电磁干扰。 + +###同轴电缆: +由内导体铜制芯线,绝缘层,网状编织的外导体屏蔽层,以及塑料保护外层组成。有良好的抗干扰性,被广泛用于较高速率的传输。 + +###光缆: +由非常透明的石英玻璃拉成细丝,主要由纤芯和包层构成双层通讯柱。可以分为单模光纤和多模光纤。 + +##信道复用技术: + +- **频分复用:**根据传输的波的频率的不同,将不同频段的波用于不同的通信。 + +- **时分复用:**将时间分割为时间段,规定在某个时间段内发送什么样的信息,根据时间段来进行信息类别的区分。也称为**同步时分复用** + +- **统计时分复用:**基于时分复用的一种改进,由于基本的时分复用并没有考虑到每个时间段内是否有信息发出,例如说每个时间段是20,但是发送消息只占用其中的2,那么剩下的18就处于空闲时间。统计时分复用就是基于这种考虑而设计的,他允许用户有数据时就将数据发送到缓存中,然后会依次扫描输入缓存,把缓存中的数据放入到STMD帧中,若没有就跳过,每当一个帧满了就把这个帧发出去。STMD帧不是分配的固定时序,而是根据需要动态的分配时隙,也称之为**异步时分复用** + +- 光分复用:就是光的频分复用,根据光谱中频率的不同,用不同频率的光来携带不同的信息。 + +#数据链路层: +数据链路层主要是将上层的数据转化为数据帧发送到链路上,以及把接受到的帧中的数据取出并交给网络层。 + +##通信方式: +- **点对点通信:**通信方式是点到点的,也就是只能是两个点之间的通信。常见的就是PPP协议 + +- **广播通信:**广播通讯,也就是可以同时实现一对多的通信。常见的就是CSMA/CD(载波监听多点访问/冲突检测) + +##核心要解决的问题: + +- **封装成帧:**在一段数据的前后分别添加首部和尾部,这样就构成了一个帧。接收端在接受到后就可以方便准确的确定帧的首尾,也称为帧定界符。同时定义出了最大传输单元(MTU)--表示一次可以传输的最大长度上限。 + +- **透明传输:** 由于使用特定的字符来表示帧的开始和结束,所以传输的内容中不能出现和帧定界符相同的字符,但这显然是不可能的,为了解决这个办法,就可以在内容中和帧定界符一样的字符前边加上规定好的转义字符,这种方法称为字符填充或者是字节填充。 + +- **差错检测:** 比特在传输过程中可能产生差错,差错检测就是用于检测出现的差错,以便及时的重传,最常用的差错检测算法就是[CRC(循环冗余检验)](http://baike.sogou.com/v7730112.htm?fromTitle=CRC%E6%A0%A1%E9%AA%8C) + +#网络层 + +网络层主要是向上只提供简单灵活的,无连接的,尽最大努力交付的数据报服务。 + +##IP协议(网际协议): +IP协议是TCP/IP体系中最主要的协议之一,一切在IP之下,一切又在IP之上。我们常说的应该是IP协议族,还包含配套的协议: + +- ARP(地址解析协议):将网络的IP地址转化为实际的物理地址(MAC地址),并存储在MAC地址表中。 + +- ICMP(网际控制报文协议):用于进行差错情况和异常情况的反馈,分为询问报文和差错报告报文。 + +- IGMP(网际组管理协议):用于控制和管理多播和组播的协议。 + +网络地址(IP地址)主要分为五类: + +- A类:前8位为网络位,后24位为主机位,首位为0 + +- B类:前16位为网络位,后16位为主机位,前两位为10 + +- C类:前24位为网络位,后8位位主机位,前三位为110 + +- D类:前四位为1110,用于多播地址 + +- E类:前四位为1111,保留为以后使用 + +##路由选择协议: + +路由选择协议分为**内部网关协议(IGP)**和**外部网关协议(EGP)** + +###内部网关协议: + +主要是有RIP协议和OSPF协议 + +- **RIP协议(路由信息协议):**基于距离矢量的协议 + +- **OSPF(开放最短路径优先协议):**基于链路状态的协议 + +###外部网关协议: + +主要是**边界网关协议(BGP)**,将一个大的网络分为多个小的自治域,每个自治域内有一个网关路由负责和其他的自治域的网关进行通讯。 + +# 传输层 + +网络层主要是为主机之间提供逻辑通讯,而传输层为应用程序之间提供端到端的逻辑通讯。主要是两种类型的通讯方式,面向连接的TCP协议和面向无连接的UDP。 + +##端口号: +端口号按照使用地方的不同分为两大类:服务端端口号,客户端端口号。 +按照占用时长又可以分为熟知端口号(0~1023),登记端口号(1024~49151),短暂端口号(49152~65535) + +###常见端口: + +- FTP(文件传输协议):20,21------其中20端口用于传输数据,21端口用于命令控制 + +- Telnet(远程登录协议):23 + +- DNS(域名解析服务):53 + +- TFTP(简单文件传输协议):69 + +- HTTP(超文本传输协议):80 + +##两种协议: + +- **UDP(用户数据报协议):** + + - UDP是无连接的 + - UDP使用尽最大努力交付,但是不保证可靠交付 + - UDP是面向报文的 + - UDP没有拥塞控制 + - UDP支持一对一,一对多,多对一,多对一的交互通讯 + - UDP首部的开销小 + +- **TCP(传输控制协议):** + + - TCP是面向连接的 + - 每一条TCP连接只能由两个端点,每一条TCP连接只能是点对点的$TCP连接::= \{ socket_1,socket_2 \} =\{ (IP_1:port_1),(IP_2:port_2)\}$ + - TCP提供可靠交付的服务 + - TCP提供全双工通信 + - 面向字节流 + +###可靠传输的实现机制: + +- **停止等待协议:** 每发完一个分组就停止发送,直到收到上一个分组的确认信息。若超过规定时间没有接收到确认信息,边认为是分组丢失,开始重传。 + +- **连续ARQ协议:** 发送方采用滑动窗口的形式,处于滑动窗口的分组可以直接发送出去;接收方一般采用累积确认的方式,也就是说接受方不必对接收到的每一个分组都进行确认,而是对按序到达的最后一个分组进行确认,而发送方每接收到一个确认,窗口就向前滑动一定距离。 + +- **流量控制:**协调发送方和接收方的收发速率,利用滑动窗口来协调,使用探测报文来探测当前应该发送的速率,采用[Nagle算法](http://baike.sogou.com/v10500918.htm?fromTitle=Nagle%E7%AE%97%E6%B3%95) + +- **拥塞控制:** +当网络中某一资源的需求超出了该资源所能提供的可用部分,这时网络的性能就要开始变坏,这种情况就叫做拥塞。而拥塞控制就是为了减少或者避免拥塞对网络性能的影响而做出的一种控制手段。 + + - **拥塞控制思路:**发送方维持一个叫做**拥塞窗口**的状态变量,拥塞窗口的大小取决于网络的拥塞程度,并且在动态的变化。发送方让自己的发送窗口等于拥塞窗口,如果在考虑接收方的接收能力,一般发送窗口还要小于拥塞窗口。 + + - **慢开始:**当主机开始发送数据的时候,由小到大的增大发送窗口,也就是由小到大的增大拥塞窗口。接收方接收到一个报文之后就回传一个确认报文,发送方每接收到一个确认报文,就将拥塞窗口加1,这样每经过一个传输轮次之后,拥塞窗口就增大一倍。 + + - **拥塞避免:**思路是让拥塞窗口缓慢的增大,即每经过一个往返时间RTT就把发送方的拥塞窗口加1,而不是加倍,这样拥塞窗口就是线性缓慢增加,比慢开始的增长速率缓慢的多。 + + - **慢开始门限:**为了防止拥塞窗口增长过大引起网络拥塞,还需要设置一个慢开始门限 + + - 拥塞窗口<慢开始门限时,使用慢开始算法 + - 拥塞窗口>慢开始门限时,使用拥塞避免算法 + - 拥塞窗口=慢开始门限时,两种算法都可以 + + - **快重传:**要求收到方每收到一个时序的报文段之后就立即发出重复确认,而不要等到自己发送数据时才进行捎带确认。而发送方只要一连收到三个重复确认就应当立即重传对方尚未接受到的报文,而不必等待为报文设置的重传计时器到期。 + + - **快回复:**与快重传配合使用,当发送方连续收到三个重复确认的时候,就执行“乘法减小”算法,将慢开始门限减半。将拥塞窗口设置为慢开始门限减半之后的值,并开始指向拥塞避免算法。 + +###TCP的连接管理: + +####连接三次握手: + +1. 客户端请求建立连接:SYN=1,seq=x; +2. 服务器对客户端的请求进行响应:SYN=1,ACK=1,seq=y,ack=x+1 +3. 客户端对服务器端的响应信息进行回应:ACK=1,seq=x+1,ack=y+1 + +**注:** SYN为同步信息,在建立连接过程中始终为1 + +####断开连接四次握手: + +1. 客户端请求断开连接: FIN=1,seq = u; +2. 服务端对客户端的请求应答:ACK=1,seq=v,ack=u+1; +3. 服务端请求断开连接:FIN=1,ACK=1,seq=w,ack=u+1; +4. 客户端对服务端的请求应答:ACK=1,seq=u+1,ack=w+1; + +# 应用层 +应用层有多种协议,常用到的就是HTTP以及HTTPS。 + +**HTTP协议报文格式** + +|请求报文|相应报文| +|---|---| +|请求行(用于区分是请求报文还是响应报文,在响应报文中为状态行)|状态行| +|首部行(用来说明浏览器,服务器或者是报文主体的一些信息)|首部行| +|空行(用于隔开请求实体和首部行)|空行| +|实体主体(用于一些请求或者是响应的的参数内容等)|实体主体| + +**常见状态码** + +> 1xx:表示通知信息,例如表示收到或者是正在处理 +> 2xx:表示成功,例如表示接受或知道了 +> 3xx:表示重定向,例如表示完成请求还需要采取进一步的行动 +> 4xx:表示客户端的差错,例如表示请求中有语法错误或不能完成 +> 5xx:表示服务器端的差错:例如表示服务器失效无法完成请求 + +HTTPS协议就是对HTTP协议的加密,更加安全可靠,采用HTTP+SSL(安全套接字层)来保证数据的安全性。 +