这篇文章是本身所学的《计算机网络》这门课程的总结,若是有任何错误欢迎指正。html
网络层和运输层的功能一般由操做系统提供,通常经过操做系统的
Socket
接口android
网络层中最重要的就是IP协议
。以下图,经过IP协议能够实如今不一样的网络中进行通讯,而不用关系下层的网络接口层中所使用的协议。 git
IP协议是无链接的、尽最大努力交付的不可靠协议面试
IP地址是IP协议用来识别不一样主机的地址,相似于MAC地址。算法
以A类地址为例,一个A类地址能够连2^24
个主机,可是我只须要链接2^20
个主机,而使用B类地址又不足,这种状况就形成了浪费;再加上IP地址快耗尽的问题,就出现了三级IP 地址。数据库
以下图,经过从主机号借用若干个位做为子网号subnet-id
,而主机号 host-id
也就相应减小了若干个位。经过这种方式就能够对IP地址进行更精细地划分,从而减小IP地址地浪费。并且划分子网纯属一个单位内部的事情单位对外仍然表现为没有划分子网的网络,从而兼容之前的两级IP 地址。安全
经过子网掩码来获取IP地址中的子网部分,如图IP地址与子网掩码进行与运算获得子网的网络地址:服务器
因为IPv4的地址即将耗尽,就采用无分类编址(CIDR)消除了传统的 A 类、B 类和 C 类地址以及划分子网的概念,从而使用各类长度的“网络前缀”来代替分类地址中的网络号和子网号。网络
IP协议并非一个可靠的协议,它不保证数据被送达,那么,天然的,保证数据送达的工做应该由其余的模块来完成。其中一个重要的模块就是ICMP(网络控制报文)协议。ICMP不是高层协议,而是IP层的协议。
当传送IP数据包发生错误。好比主机不可达,路由不可达等等,ICMP协议将会把错误信息封包,而后传送回给主机。给主机一个处理错误的机会,这 也就是为何说创建在IP层以上的协议是可能作到安全的缘由。tcp
RAP协议是经过目的IP地址来获取目的MAC地址的协议。
版本:IP协议的版本,占4位
生存时间(TTL):数据报在网络中可经过的路由器数,IP数据包每穿过一个路由器,该数据包的TTL数值就会减小1,当该数据包的TTL成为零,它就会被自动抛弃。
协议:0x11表明UDP,0x06表明TCP
TCP | UDP | |
---|---|---|
可靠性 | 可靠 | 不可靠 |
链接性 | 面向链接 | 无链接 |
报文 | 面向字节流 | 面向报文 |
流量控制 | 有 | 无 |
堵塞控制 | 有 | 无 |
传播速度 | 慢 | 快 |
应用场景 | 对数据准确性要求高的场景 | 对数据效率要求高的,好比视频通话等。 |
面向报文和面向字节流的区别:
TCP是面向链接的运输层协议,所以须要先创建链接,在进行数据传输。TCP创建链接的方式是三次握手,而切断链接是经过四次挥手。
为何要三次握手?
为了防止已失效的链接请求报文段忽然又传送到了服务端,于是产生错误。
具体例子——“已失效的链接请求报文段”的产生在这样一种状况下:
客户端发出的第一个链接请求报文段并无丢失,而是在某个网络结点长时间的滞留了,以至延误到链接释放之后的某个时间才到达服务器。
原本这是一个早已失效的报文段。但服务器收到此失效的链接请求报文段后,就误认为是客户端再次发出的一个新的链接请求。因而就向客户端发出确认报文段,赞成创建链接。
假设不采用“三次握手”,那么只要服务器发出确认,新的链接就创建了。因为如今客户端并无发出创建链接的请求,所以不会理睬服务器的确认,也不会向服务器发送数据。但服务器却觉得新的运输链接已经创建,并一直等待客户端发来数据。这样,服务器的不少资源就白白浪费掉了。采用“三次握手”的办法能够防止上述现象发生。
例如刚才那种状况,客户端不会向服务器的确认发出确认。服务器因为收不到确认,就知道客户端并无要求创建链接。”
TCP协议是一种面向链接的、可靠的、基于字节流的运输层通讯协议。TCP是全双工模式,这就意味着,当主机1发出FIN报文段时,只是表示主机1已经没有数据要发送了,主机1告诉主机2,它的数据已经所有发送完毕了;
可是,这个时候主机1仍是能够接受来自主机2的数据;当主机2返回ACK报文段时,表示它已经知道主机1没有数据发送了,可是主机2仍是能够发送数据到主机1的;当主机2也发送了FIN报文段时,这个时候就表示主机2也没有数据要发送了,就会告诉主机1,我也没有数据要发送了,以后彼此就会愉快的中断此次TCP链接。
为何要等待2MSL?
MSL:报文段最大生存时间,它是任何报文段被丢弃前在网络内的最长时间。
流量控制(flow control)就是让发送方的发送速率不要太快,既要让接收方来得及接收,也不要使网络发生拥塞。 利用滑动窗口机制能够很方便地在 TCP 链接上实现流量控制。
滑动窗口机制:滑动窗口机制就是发送方和接收方各自维护一个发送窗口和接受窗口。当网络堵塞时,接收方能够减少接受窗口的大小,同时在肯定报文中设置发送窗口的大小,当发送方接受到肯定报文时,能够减少发送窗口的大小,从而减小发送速率。同理,当网络通畅时,能够提升发送速率。
在某段时间,若对网络中某资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏,就产生拥塞
堵塞控制和流量控制的区别?
- 拥塞控制是一个全局性的过程,涉及到全部的主机、全部的路由器,以及与下降网络传输性能有关的全部因素。
- 流量控制每每指在给定的发送端和接收端之间的点对点通讯量的控制。流量控制所要作的就是抑制发送端发送数据的速率,以便使接收端来得及接收。
堵塞控制的方法:
发送方维护一个叫作拥塞窗口的状态变量。拥塞窗口的大小取决于网络的拥塞程度,而且动态地在变化。 发送方控制拥塞窗口的原则是:只要网络没有出现拥塞,拥塞窗口就再增大一些,以便把更多的分组发送出去。但只要网络出现拥塞,拥塞窗口就减少一些,以减小到网络中的分组数。
如上图,慢开始算法:
使用慢开始算法后,每通过一个传输轮次,拥塞窗口 cwnd 就加倍。 一个传输轮次所经历的时间其实就是往返时间 RTT
。传输轮次更增强调:把拥塞窗口 cwnd 所容许发送的报文段都连续发送出去,并收到了对已发送的最后一个字节的确认。 例如,拥塞窗口 cwnd
= 4,这时的往返时间 RTT
就是发送方连续发送 4 个报文段,并收到这 4 个报文段的确认,总共经历的时间。
拥塞避免算法
拥塞窗口 cwnd 缓慢地增大,即每通过一个往返时间 RTT
就把发送方的拥塞窗口 cwnd
加 1,而不是加倍,使拥塞窗口 cwnd
按线性规律缓慢增加。
因为指数爆炸的性质,就必须设置慢开始的门限 ssthresh
,其用法以下:
cwnd
< ssthresh
时,使用慢开始算法。cwnd
> ssthresh
时,中止使用慢开始算法而改用拥塞避免算法。cwnd
= ssthresh
时,既可以使用慢开始算法,也可以使用拥塞避免算法。不管在慢开始阶段仍是在拥塞避免阶段,只要发送方判断网络出现拥塞(其根据就是没有按时收到确认),就要把慢开始门限 ssthresh
设置为出现拥塞时的发送方窗口值的一半(但不能小于2)。 而后把拥塞窗口 cwnd 从新设置为 1,执行慢开始算法。 这样作的目的就是要迅速减小主机发送到网络中的分组数,使得发生拥塞的路由器有足够时间把队列中积压的分组处理完毕。以下图:
快重传算法首先要求接收方每收到一个失序的报文段后就当即发出重复确认。这样作可让发送方及早知道有报文段没有到达接收方。 发送方只要一连收到三个重复确认就应当当即重传对方还没有收到的报文段。 不难看出,快重传并不是取消重传计时器,而是在某些状况下可更早地重传丢失的报文段。以下图:
快恢复
注意发送方的发送窗口的上限值应当取为接收方窗口
rwnd
和拥塞窗口cwnd
这两个变量中较小的一个
当rwnd < cwnd
时,是接收方的接收能力限制发送窗口的最大值。
当cwnd < rwnd
时,则是网络的拥塞限制发送窗口的最大值。
DNS 是一个 域名 和 IP 相互映射的分布式数据库,经过DNS咱们就能够经过域名更方便的访问互联网 详细的见DNS基础知识
HTTP是超文本传输协议,用于客户端和服务器端之间的通讯,属于TCP/IP中的应用层。 详细的见见《图解HTTP》核心知识总结
参考资料: