除了标准的OSI七层模型之外,常见的网络层次划分还有TCP/IP四层协议以及TCP/IP五层协议,它们之间的对应关系以下图所示:程序员
TCP/IP协议毫无疑问是互联网的基础协议,没有它就根本不可能上网,任何和互联网有关的操做都离不开TCP/IP协议。无论是OSI七层模型仍是TCP/IP的四层、五层模型,每一层中都要本身的专属协议,完成本身相应的工做以及与上下层级之间进行沟通。因为OSI七层模型为网络的标准层次划分,因此咱们以OSI七层模型为例从下向上进行一一介绍。面试
激活、维持、关闭通讯端点之间的机械特性、电气特性、功能特性以及过程特性。该层为上层协议提供了一个传输数据的可靠的物理媒体。简单的说,物理层确保原始的数据可在各类物理媒体上传输。物理层记住两个重要的设备名称,中继器(Repeater,也叫放大器)和集线器。redis
在物理层上所传送的数据单位是比特。算法
物理层(physical layer)的做用是实现相邻计算机节点之间比特流的透明传送,尽量屏蔽掉具体传输介质和物理设备的差别, 使其上面的数据链路层没必要考虑网络的具体传输介质是什么。“透明传送比特流”表示经实际电路传送后的比特流没有发生变化,对传送的比特流来讲,这个电路好像是看不见的。数据库
数据链路层(data link layer)一般简称为链路层。两台主机之间的数据传输,老是在一段一段的链路上传送的,这就须要使用专门的链路层的协议。 在两个相邻节点之间传送数据时,数据链路层将网络层交下来的 IP 数据报组装成帧,物理层传上来的比特数据也会被组装成帧,在两个相邻节点间的链路上传送帧。每一帧包括数据和必要的控制信息(如同步信息,地址信息,差错控制等)。编程
在接收数据时,控制信息使接收端可以知道一个帧从哪一个比特开始和到哪一个比特结束。这样,数据链路层在收到一个帧后,就可从中提取出数据部分,上交给网络层。 控制信息还使接收端可以检测到所收到的帧中有无差错。若是发现差错,数据链路层就简单地 丢弃 这个出了差错的帧,以避免继续在网络中传送下去白白浪费网络资源。若是须要改正数据在链路层传输时出现差错(这就是说,数据链路层不只要检错,并且还要纠错),那么就要采用可靠性传输协议来纠正出现的差错。这种方法会使链路层的协议复杂些。浏览器
数据链路层在物理层提供的服务的基础上向网络层提供服务,其最基本的服务是将源自网络层来的数据可靠地传输到相邻节点的目标机网络层。为达到这一目的,数据链路必须具有一系列相应的功能,主要有:如何将数据组合成数据块,在数据链路层中称这种数据块为帧(frame),帧是数据链路层的传送单位;如何控制帧在物理信道上的传输,包括如何处理传输差错,如何调节发送速率以使与接收方相匹配;以及在两个网络实体之间提供数据链路通路的创建、维持和释放的管理。数据链路层在不可靠的物理介质上提供可靠的传输。该层的做用包括:物理地址寻址、数据的成帧、流量控制、数据的检错、重发等。缓存
有关数据链路层的重要知识点:安全
1> 数据链路层为网络层提供可靠的数据传输;服务器
2> 基本数据单位为帧;
3> 主要的协议:以太网协议;
4> 两个重要设备名称:网桥和交换机。
在 计算机网络中进行通讯的两个计算机之间可能会通过不少个数据链路,也可能还要通过不少通讯子网。网络层的任务就是选择合适的网间路由和交换结点, 确保数据及时传送。 在发送数据时,网络层把运输层产生的报文段或用户数据报封装成分组和包进行传送。在 TCP/IP 体系结构中,因为网络层使用 IP 协议,所以分组也叫 IP 数据报 ,简称 数据报。
这里要注意:不要把运输层的“用户数据报 UDP ”和网络层的“ IP 数据报”弄混。另外,不管是哪一层的数据单元,均可笼统地用“分组”来表示。
这里强调指出,网络层中的“网络”二字已经不是咱们一般谈到的具体网络,而是指计算机网络体系结构模型中第三层的名称.
互联网是由大量的异构(heterogeneous)网络经过路由器(router)相互链接起来的。互联网使用的网络层协议是无链接的网际协议(Internet Protocol)和许多路由选择协议,所以互联网的网络层也叫作网际层或IP层。
网络层的目的是实现两个端系统之间的数据透明传送,具体功能包括寻址和路由选择、链接的创建、保持和终止等。它提供的服务使传输层不须要了解网络中的数据传输和交换技术。若是您想用尽可能少的词来记住网络层,那就是“路径选择、路由及逻辑寻址”。
网络层中涉及众多的协议,其中包括最重要的协议,也是TCP/IP的核心协议——IP协议。IP协议很是简单,仅仅提供不可靠、无链接的传送服务。
IP协议的主要功能有:不可靠、无链接数据报传输、数据报路由选择和差错控制。与IP协议配套使用实现其功能的还有地址解析协议ARP、逆地址解析协议RARP、因特网报文协议ICMP、因特网组管理协议IGMP。具体的协议咱们会在接下来的部分进行总结
有关网络层的重点为:
1> 网络层负责对子网间的数据包进行路由选择。此外,网络层还能够实现拥塞控制、网际互连等功能;
2> 基本数据单位为 IP数据报;
3> 包含的主要协议:
IP协议(Internet Protocol,因特网互联协议);
ICMP协议(Internet Control Message Protocol,因特网控制报文协议);
ARP协议(Address Resolution Protocol,地址解析协议); ** 根据IP地址获取MAC物理地址**的一个TCP/IP协议
RARP协议(Reverse Address Resolution Protocol,逆地址解析协议)。
4> 重要的设备:路由器。
在局域网,数据传输须要依靠MAC来识别对方地址。发生数据的时候,数据发送端计算机容首先拿接收端的计算机IP与本身主机子网掩码相匹配,匹配后,发现跟本身是同一网段的,则使用MAC地址去寻找对方,若是不是同一网段的,则封装上对方的IP地址为目标地址,发现网关,由网关发现其余网络,不过到达了目标网络后,仍是要根据对方MAC地址来寻找目标主机。
简单的说,局域网内传输用MAC,网间传输就要在MAC外面再加一层IP
运输层(transport layer)的主要任务就是负责向两台主机进程之间的通讯提供通用的数据传输服务。应用进程利用该服务传送应用层报文。“通用的”是指并不针对某一个特定的网络应用,而是多种应用可使用同一个传输层服务。因为一台主机可同时运行多个线程,所以运输层有复用和分用的功能。所谓复用就是指多个应用层进程可同时使用下面传输层的服务,分用和复用相反,是传输层把收到的信息分别交付上面应用层中的相应进程。
运输层主要使用如下两种协议:
第一个端到端,即主机到主机的层次。传输层负责将上层数据分段并提供端到端的、可靠的或不可靠的传输。此外,传输层还要处理端到端的差错控制和流量控制问题。
传输层的任务是根据通讯子网的特性,最佳的利用网络资源,为两个端系统的会话层之间,提供创建、维护和取消传输链接的功能,负责端到端的可靠数据传输。在这一层,信息传送的协议数据单元称为段或报文。
网络层只是根据网络地址将源结点发出的数据包传送到目的结点,而传输层则负责将数据可靠地传送到相应的端口。
有关网络层的重点:
1> 传输层负责将上层数据分段并提供端到端的、可靠的或不可靠的传输以及端到端的差错控制和流量控制问题;
2> 包含的主要协议:TCP协议(Transmission Control Protocol,传输控制协议)、UDP协议(User Datagram Protocol,用户数据报协议);
3> 重要设备:网关。
4> 数据单元:段或报文
会话层管理主机之间的会话进程,即负责创建、管理、终止进程之间的会话。会话层还利用在数据中插入校验点来实现数据同步和数据校验。
表示层对上层数据或信息进行变换以保证一个主机应用层信息能够被另外一个主机的应用程序理解。表示层的数据转换包括数据的加密、压缩、格式转换等。
应用层(application-layer)的任务是经过应用进程间的交互来完成特定网络应用。应用层协议定义的是应用进程(进程:主机中正在运行的程序)间的通讯和交互的规则。对于不一样的网络应用须要不一样的应用层协议。在互联网中应用层协议不少,如域名系统DNS,支持万维网应用的 HTTP协议,支持电子邮件的 SMTP协议等等。
应用层交互的数据单元称为报文。
域名系统
域名系统(Domain Name System缩写 DNS,Domain Name被译为域名)是因特网的一项核心服务,它做为能够将域名和IP地址相互映射的一个分布式数据库,可以令人更方便的访问互联网,而不用去记住可以被机器直接读取的IP数串
HTTP协议
超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为普遍的一种网络协议。全部的 WWW(万维网) 文件都必须遵照这个标准。设计 HTTP 最初的目的是为了提供一种发布和接收 HTML 页面的方法。
应用层为操做系统或网络应用程序提供访问网络服务的接口。
1> 数据传输基本单位为报文;
2> 包含的主要协议:FTP(文件传送协议)、Telnet(远程登陆协议)、DNS(域名解析协议)、SMTP(邮件传送协议),POP3协议(邮局协议),HTTP协议(Hyper Text Transfer Protocol)。
1)网络地址
IP地址由网络号(包括子网号)和主机号组成,网络地址的主机号为全0,网络地址表明着整个网络。
2)广播地址
广播地址一般称为直接广播地址,是为了区分受限广播地址。
广播地址与网络地址的主机号正好相反,广播地址中,主机号为全1。当向某个网络的广播地址发送消息时,该网络内的全部主机都能收到该广播消息。
3)组播地址
D类地址就是组播地址。
先回忆下A,B,C,D类地址吧:
A类地址以0开头,第一个字节做为网络号,地址范围为:0.0.0.0~127.255.255.255;(modified @2016.05.31)
B类地址以10开头,前两个字节做为网络号,地址范围是:128.0.0.0~191.255.255.255;
C类地址以110开头,前三个字节做为网络号,地址范围是:192.0.0.0~223.255.255.255。
D类地址以1110开头,地址范围是224.0.0.0~239.255.255.255,D类地址做为组播地址(一对多的通讯);
E类地址以1111开头,地址范围是240.0.0.0~255.255.255.255,E类地址为保留地址,供之后使用。
注:只有A,B,C有网络号和主机号之分,D类地址和E类地址没有划分网络号和主机号。
4)255.255.255.255
该IP地址指的是受限的广播地址。受限广播地址与通常广播地址(直接广播地址)的区别在于,受限广播地址只能用于本地网络,路由器不会转发以受限广播地址为目的地址的分组;通常广播地址既可在本地广播,也可跨网段广播。例如:主机192.168.1.1/30上的直接广播数据包后,另一个网段192.168.1.5/30也能收到该数据报;若发送受限广播数据报,则不能收到。
注:通常的广播地址(直接广播地址)可以经过某些路由器(固然不是全部的路由器),而受限的广播地址不能经过路由器。
5)0.0.0.0
经常使用于寻找本身的IP地址,例如在咱们的RARP,BOOTP和DHCP协议中,若某个未知IP地址的无盘机想要知道本身的IP地址,它就以255.255.255.255为目的地址,向本地范围(具体而言是被各个路由器屏蔽的范围内)的服务器发送IP请求分组。
6)回环地址
127.0.0.0/8被用做回环地址,回环地址表示本机的地址,经常使用于对本机的测试,用的最多的是127.0.0.1。
7)A、B、C类私有地址
私有地址(private address)也叫专用地址,它们不会在全球使用,只具备本地意义。
A类私有地址:10.0.0.0/8,范围是:10.0.0.0~10.255.255.255
B类私有地址:172.16.0.0/12,范围是:172.16.0.0~172.31.255.255
C类私有地址:192.168.0.0/16,范围是:192.168.0.0~192.168.255.255
随着互连网应用的不断扩大,原先的IPv4的弊端也逐渐暴露出来,即网络号占位太多,而主机号位太少,因此其能提供的主机地址也愈来愈稀缺,目前除了使用NAT在企业内部利用保留地址自行分配之外,一般都对一个高类别的IP地址进行再划分,以造成多个子网,提供给不一样规模的用户群使用。
这里主要是为了在网络分段状况下有效地利用IP地址,经过对主机号的高位部分取做为子网号,从一般的网络位界限中扩展或压缩子网掩码,用来建立某类地址的更多子网。但建立更多的子网时,在每一个子网上的可用主机地址数目会比原先减小。
什么是子网掩码?
子网掩码是标志两个IP地址是否同属于一个子网的,也是32位二进制地址,其每个为1表明该位是网络位,为0表明主机位。它和IP地址同样也是使用点式十进制来表示的。若是两个IP地址在子网掩码的按位与的计算下所得结果相同,即代表它们共属于同一子网中。
在计算子网掩码时,咱们要注意IP地址中的保留地址,即“ 0”地址和广播地址,它们是指主机地址或网络地址全为“ 0”或“ 1”时的IP地址,它们表明着本网络地址和广播地址,通常是不能被计算在内的。
子网掩码的计算:
对于无须再划分红子网的IP地址来讲,其子网掩码很是简单,即按照其定义便可写出:如某B类IP地址为 10.12.3.0,无须再分割子网,则该IP地址的子网掩码255.255.0.0。若是它是一个C类地址,则其子网掩码为 255.255.255.0。其它类推,再也不详述。下面咱们关键要介绍的是一个IP地址,还须要将其高位主机位再做为划分出的子网网络号,剩下的是每一个子网的主机号,这时该如何进行每一个子网的掩码计算。
下面总结一下有关子网掩码和网络划分常见的面试考题:
1)利用子网数来计算
在求子网掩码以前必须先搞清楚要划分的子网数目,以及每一个子网内的所需主机数目。
(1) 将子网数目转化为二进制来表示;
如欲将B类IP地址168.195.0.0划分红27个子网:27=11011;
(2) 取得该二进制的位数,为N;
该二进制为五位数,N = 5
(3) 取得该IP地址的类子网掩码,将其主机地址部分的的前N位置1即得出该IP地址划分子网的子网掩码。
将B类地址的子网掩码255.255.0.0的主机地址前5位置 1,获得 255.255.248.0
2)利用主机数来计算
如欲将B类IP地址168.195.0.0划分红若干子网,每一个子网内有主机700台:
(1) 将主机数目转化为二进制来表示;
700=1010111100;
(2) 若是主机数小于或等于254(注意去掉保留的两个IP地址),则取得该主机的二进制位数,为N,这里确定 N<8。若是大于254,则 N>8,这就是说主机地址将占据不止8位;
该二进制为十位数,N=10;
(3) 使用255.255.255.255来将该类IP地址的主机地址位数所有置1,而后从后向前的将N位所有置为 0,即为子网掩码值。
将该B类地址的子网掩码255.255.0.0的主机地址所有置1,获得255.255.255.255,而后再从后向前将后 10位置0,即为:11111111.11111111.11111100.00000000,即255.255.252.0。这就是该欲划分红主机为700台的B类IP地址 168.195.0.0的子网掩码。
3)还有一种题型,要你根据每一个网络的主机数量进行子网地址的规划和****计算子网掩码。这也可按上述原则进行计算。
好比一个子网有10台主机,那么对于这个子网须要的IP地址是:
10+1+1+1=13
注意:加的第一个1是指这个网络链接时所需的网关地址,接着的两个1分别是指网****络地址和广播地址。
由于13小于16(16等于2的4次方),因此主机位为4位。而256-16=240,因此该子网掩码为255.255.255.240。
若是一个子网有14台主机,很多人常犯的错误是:依然分配具备16个地址空间的子网,而忘记了给网关分配地址。这样就错误了,由于14+1+1+1=17,17大于16,因此咱们只能分配具备32个地址(32等于2的5次方)空间的子网。这时子网掩码为:255.255.255.224。
地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到网络上的全部主机,并接收返回消息,以此肯定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留必定时间,下次请求时直接查询ARP缓存以节约资源。地址解析协议是创建在网络中各个主机互相信任的基础上的,网络上的主机能够自主发送ARP应答消息,其余主机收到应答报文时不会检测该报文的真实性就会将其记入本机ARP缓存;由此攻击者就能够向某一主机发送伪ARP应答报文,使其发送的信息没法到达预期的主机或到达错误的主机,这就构成了一个ARP欺骗。ARP命令可用于查询本机ARP缓存中IP地址和MAC地址的对应关系、添加或删除静态对应关系等。
ARP工做流程举例:
主机A的IP地址为192.168.1.1,MAC地址为0A-11-22-33-44-01;
主机B的IP地址为192.168.1.2,MAC地址为0A-11-22-33-44-02;
当主机A要与主机B通讯时,地址解析协议能够将主机B的IP地址(192.168.1.2)解析成主机B的MAC地址,如下为工做流程:
(1)根据主机A上的路由表内容,IP肯定用于访问主机B的转发IP地址是192.168.1.2。而后A主机在本身的本地ARP缓存中检查主机B的匹配MAC地址。
(2)若是主机A在ARP缓存中没有找到映射,它将询问192.168.1.2的硬件地址,从而将ARP请求帧广播到本地网络上的全部主机。源主机A的IP地址和MAC地址都包括在ARP请求中。本地网络上的每台主机都接收到ARP请求而且检查是否与本身的IP地址匹配。若是主机发现请求的IP地址与本身的IP地址不匹配,它将丢弃ARP请求。
(3)主机B肯定ARP请求中的IP地址与本身的IP地址匹配,则将主机A的IP地址和MAC地址映射添加到本地ARP缓存中。
(4)主机B将包含其MAC地址的ARP回复消息直接发送回主机A。
(5)当主机A收到从主机B发来的ARP回复消息时,会用主机B的IP和MAC地址映射更新ARP缓存。本机缓存是有生存期的,生存期结束后,将再次重复上面的过程。主机B的MAC地址一旦肯定,主机A就能向主机B发送IP通讯了。
逆地址解析协议,即RARP,功能和ARP协议相对,其将局域网中某个主机的物理地址转换为IP地址,好比局域网中有一台主机只知道物理地址而不知道IP地址,那么能够经过RARP协议发出征求自身IP地址的广播请求,而后由RARP服务器负责回答。
RARP协议工做流程:
(1)给主机发送一个本地的RARP广播,在此广播包中,声明本身的MAC地址而且请求任何收到此请求的RARP服务器分配一个IP地址;
(2)本地网段上的RARP服务器收到此请求后,检查其RARP列表,查找该MAC地址对应的IP地址;
(3)若是存在,RARP服务器就给源主机发送一个响应数据包并将此IP地址提供给对方主机使用;
(4)若是不存在,RARP服务器对此不作任何的响应;
(5)源主机收到从RARP服务器的响应信息,就利用获得的IP地址进行通信;若是一直没有收到RARP服务器的响应信息,表示初始化失败。
常见的路由选择协议有:RIP协议、OSPF协议。
RIP协议 :底层是贝尔曼福特算法,它选择路由的度量标准(metric)是跳数,最大跳数是15跳,若是大于15跳,它就会丢弃数据包。
OSPF协议 :Open Shortest Path First开放式最短路径优先,底层是迪杰斯特拉算法,是链路状态路由选择协议,它选择路由的度量标准是带宽,延迟。
TCP/IP协议是Internet最基本的协议、Internet国际互联网络的基础,由网络层的IP协议和传输层的TCP协议组成。通俗而言:TCP负责发现传输的问题,一有问题就发出信号,要求从新传输,直到全部数据安全正确地传输到目的地。而 IP 是给因特网的每一台联网设备规定一个地址。
IP层接收由更低层(网络接口层例如以太网设备驱动程序)发来的数据包,并把该数据包发送到更高层---TCP或UDP层;相反,IP层也把从TCP或UDP层接收来的数据包传送到更低层。IP数据包是不可靠的,由于IP并没有作任何事情来确认数据包是否按顺序发送的或者有没有被破坏,IP数据包中含有发送它的主机的地址(源地址)和接收它的主机的地址(目的地址)。
TCP是面向链接的通讯协议,经过三次握手创建链接,通信完成时要拆除链接,因为TCP是面向链接的因此只能用于端到端的通信。
TCP提供的是一种可靠的数据流服务,采用“带重传的确定确认”技术来实现传输的可靠性。TCP还采用一种称为“滑动窗口”的方式进行流量控制,所谓窗口实际表示接收能力,用以限制发送方的发送速度。
TCP报文首部格式:
TCP协议的三次握手和四次挥手:
注:seq:"sequance"序列号;ack:"acknowledge"确认号;SYN:"synchronize"请求同步标志;;ACK:"acknowledge"确认标志";FIN:"Finally"结束标志。
首先Client端发送链接请求报文,Server段接受链接后回复ACK报文,并为此次链接分配资源 (syn+ack)。Client端接收到ACK报文后也向Server段发送ACK报文,并分配资源 (ack),这样TCP链接就创建了。
假设Client端发起中断链接请求,也就是发送FIN报文。Server端接到FIN报文后,意思是说"我Client端没有数据要发给你了",可是若是Server还有数据没有发送完成,则没必要急着关闭Socket,能够继续发送数据。因此Server端先发送ACK,"告诉Client端,你的请求我收到了,可是我还没准备好,请继续等个人消息"。这个时候Client端就进入FIN_WAIT状态,继续等待Server端的FIN报文。
当Server端肯定数据已发送完成,则向Client端发送FIN报文,"告诉Client端,好了,我这边数据发完了,准备好关闭链接了"。Client端收到FIN报文后,"就知道能够关闭链接了,可是他仍是不相信网络,怕Server端不知道要关闭,因此发送ACK后进入TIME_WAIT状态,若是Server端没有收到ACK则能够重传。“,Server端收到ACK后,"就知道能够断开链接了"。Client端等待了2MSL后依然没有收到回复,则证实Server端已正常关闭,那好,我Client端也能够关闭链接了。Ok,TCP链接就这样关闭了!
三次握手的目的是创建可靠的通讯信道,说到通信,简单来讲就是数据的发送与接收,而三次握手最主要的目的就是双方确认本身与对方的发送与接收是正常的。
第一次握手:Client 什么都不能确认;Server 确认了对方发送正常,本身接收正常
第二次握手:Client 确认了:本身发送、接收正常,对方发送、接收正常;Server 确认了:对方发送正常,本身接收正常
第三次握手:Client 确认了:本身发送、接收正常,对方发送、接收正常;Server 确认了:本身发送、接收正常,对方发送、接收正常
因此三次握手就能确认双发收发功能都正常,缺一不可。
任何一方均可以在数据传送结束后发出链接释放的通知,待对方确认后进入半关闭状态。当另外一方也没有数据再发送的时候,则发出链接释放通知,对方确认后就彻底关闭了TCP链接。
断开一个 TCP 链接则须要“四次挥手”:
试想一下,假如如今你是客户端你想断开跟Server的全部链接该怎么作?第一步,你本身先中止向Server端发送数据,并等待Server的回复。但事情尚未完,虽然你自身不往Server发送数据了,可是由于大家以前已经创建好平等的链接了,因此此时他也有主动权向你发送数据;故Server端还得终止主动向你发送数据,并等待你的确认。其实,说白了就是保证双方的一个合约的完整执行!
使用TCP的协议:FTP(文件传输协议)、Telnet(远程登陆协议)、SMTP(简单邮件传输协议)、POP3(和SMTP相对,用于接收邮件)、HTTP协议等。
UDP用户数据报协议,是面向无链接的通信协议,UDP数据包括目的端口号和源端口号信息,因为通信不须要链接,因此能够实现广播发送UDP通信时不须要接收方确认,属于不可靠的传输,可能会出现丢包现象,实际应用中要求程序员编程验证。
UDP与TCP位于同一层(传输层),但它无论数据包的顺序、错误或重发。所以,UDP不被应用于那些使用虚电路的面向链接的服务,UDP主要用于那些面向查询---应答的服务,例如NFS。相对于FTP或Telnet,这些服务须要交换的信息量较小。
每一个UDP报文分UDP报头和UDP数据区两部分。报头由四个16位长(2字节)字段组成,分别说明该报文的源端口、目的端口、报文长度以及校验值。UDP报头由4个域组成,其中每一个域各占用2个字节,具体以下:
源端口号;目标端口号;数据报长度;校验值。
使用UDP协议包括:TFTP(简单文件传输协议)、SNMP(简单网络管理协议)、DNS(域名解析协议)、NFS、BOOTP。
TCP是面向链接的,可靠的字节流服务;UDP是面向无链接的,不可靠的数据报服务。
UDP 在传送数据以前不须要先创建链接,远地主机在收到 UDP 报文后,不须要给出任何确认。虽然 UDP 不提供可靠交付,但在某些状况下 UDP 确是一种最有效的工做方式(通常用于即时通讯),好比: QQ 语音、 QQ 视频 、直播等等
TCP 提供面向链接的服务。在传送数据以前必须先创建链接,数据传送结束后要释放链接。 TCP 不提供广播或多播服务。因为 TCP 要提供可靠的,面向链接的传输服务(TCP的可靠体如今TCP在传递数据以前,会有三次握手来创建链接,并且在数据传递时,有确认、窗口、重传、拥塞控制机制,在数据传完后,还会四次握手来断开链接用来节约系统资源),这一难以免增长了许多开销,如确认,流量控制,计时器以及链接管理等。这不只使协议数据单元的首部增大不少 (20-60字节),还要占用许多处理机资源。TCP 通常用于文件传输、发送和接收邮件、远程登陆等场景。
运行于TCP协议之上的协议:
HTTP协议:超文本传输协议,用于普通浏览
HTTPS协议:安全超文本传输协议,身披SSL外衣的HTTP协议
FTP协议:文件传输协议,用于文件传输
POP3协议:邮局协议,收邮件使用
SMTP协议:简单邮件传输协议,用来发送电子邮件
Telent协议:远程登录协议,经过一个终端登录到网络
SSH协议:安全外壳协议,用于加密安全登录,替代安全性差的Telent协议
运行于UDP协议之上的协议:TFTP(简单文件传输协议)、SNMP(简单网络管理协议)、DNS(域名解析协议)、NFS
DHCP协议:动态主机配置协议,动态配置IP地址
NTP协议:网络时间协议,用于网络时间同步
BOOTP协议:引导程序协议,DHCP协议的前身,用于无盘工做站从中心服务器上获取IP地址
DNS是域名系统(DomainNameSystem)的缩写,该系统用于命名组织到域层次结构中的计算机和网络服务,能够简单地理解为将URL转换为IP地址。域名是由圆点分开一串单词或缩写组成的,每个域名都对应一个惟一的IP地址,在Internet上域名与IP地址之间是一一对应的,DNS就是进行域名解析的服务器。DNS命名用于Internet等TCP/IP网络中,经过用户友好的名称查找计算机和服务。
NAT网络地址转换(Network Address Translation)属接入广域网(WAN)技术,是一种将私有(保留)地址转化为合法IP地址的转换技术,它被普遍应用于各类类型Internet接入方式和各类类型的网络中。缘由很简单,NAT不只完美地解决了lP地址不足的问题,并且还可以有效地避免来自网络外部的攻击,隐藏并保护网络内部的计算机。
DHCP动态主机设置协议(Dynamic Host Configuration Protocol)是一个局域网的网络协议,使用UDP协议工做,主要有两个用途:给内部网络或网络服务供应商自动分配IP地址,给用户或者内部网络管理员做为对全部计算机做中央管理的手段。
超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为普遍的一种网络协议。全部的WWW文件都必须遵照这个标准。
HTTP 协议包括哪些请求?
GET:请求读取由URL所标志的信息。
POST:给服务器添加信息(如注释)。
PUT:在给定的URL下存储一个文档。
DELETE:删除给定的URL所标志的资源。
HTTP 中, POST 与 GET 的区别
1)Get是从服务器上获取数据(pull拉),Post是向服务器传送数据(push推)。
2)Get是把参数数据队列加到提交表单的Action属性所指向的URL中,值和表单内各个字段一一对应,在URL中能够看到。
3)Get传送的数据量小,不能大于2KB;Post传送的数据量较大,通常被默认为不受限制。
4)根据HTTP规范,GET用于信息获取,并且应该是安全的和幂等的。
I. 所谓 安全的 意味着该操做用于获取信息而非修改信息。换句话说,GET请求通常不该产生反作用。就是说,它仅仅是获取资源信息,就像数据库查询同样,不会修改,增长数据,不会影响资源的状态。
II. 幂等 的意味着对同一URL的多个请求应该返回一样的结果。
在浏览器中输入 www.baidu.com 后执行的所有过程
如今假设若是咱们在客户端(客户端)浏览器中输入http://www.baidu.com, 而baidu.com为要访问的服务器(服务器),下面详细分析客户端为了访问服务器而执行的一系列关于协议的操做:
1)客户端在应用层,客户端浏览器经过DNS域名解析到www.baidu.com的IP地址220.181.27.48,经过这个IP地址找到客户端到服务器的路径。客户端浏览器发起一个HTTP会话到220.161.27.48,而后经过TCP进行封装数据包,输入到传输层。
2)客户端的传输层,把HTTP会话请求分红报文段,添加源端口和目的端口,如服务器使用80端口监听客户端的请求,客户端由系统随机选择一个端口如5000,与服务器进行交换,服务器把相应的请求返回给客户端的5000端口。而后使用IP层的IP地址查找目的端。
3)客户端的网络层不用关心应用层或者传输层的东西,主要作的是经过查找路由表肯定如何到达服务器,期间可能通过多个路由器,这些都是由路由器来完成的工做,不做过多的描述,无非就是经过查找路由表决定经过那个路径到达指定的服务器。在网络层经过 IP数据包传输
4)客户端的链路层,包经过链路层发送到路由器,经过ARP协议查找给定IP地址的MAC地址,而后发送ARP请求查找目的地址,若是获得回应后就能够使用ARP的请求应答交换的IP,数据包就能够传输了,而后发送IP数据报到达服务器的地址。
数据帧(Frame):是一种信息单位,它的起始点和目的点都是数据链路层。
数据包(Packet):也是一种信息单位,它的起始和目的地是网络层。
数据报(Datagram):一般是指起始点和目的地都使用无链接网络服务的网络层的信息单元。
段(Segment):一般是指起始点和目的地都是传输层的信息单元。
消息(message):是指起始点和目的地都在网络层以上(常常在应用层)的信息单元。
SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。 SMTP 协议属于 TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。 经过 SMTP 协议所指定的服务器, 就能够把 E-mail 寄到收信人的服务器上了,整个过程只要几分钟。SMTP 服务器则是遵循 SMTP 协议的发送邮件服务器,用来发送或中转发出的电子邮件。
自动重传请求(Automatic Repeat-reQuest,ARQ)是OSI模型中数据链路层和传输层的错误纠正协议之一。它经过使用确认和超时这两个机制,在不可靠服务的基础上实现可靠的信息传输。若是发送方在发送后一段时间以内没有收到确认帧,它一般会从新发送。ARQ包括中止等待ARQ协议和连续ARQ协议。
优势: 简单
缺点: 信道利用率低,等待时间长
1) 无差错状况:
发送方发送分组,接收方在规定时间内收到, 而且回复确认.发送方再次发送。
2) 出现差错状况(超时重传):
中止等待协议中超时重传是指只要超过一段时间仍然没有收到确认,就重传前面发送过的分组(认为刚才发送过的分组丢失了)。所以每发送完一个分组须要设置一个超时计时器,其重传时间应比数据在分组传输的平均往返时间更长一些。这种自动重传方式常称为 自动重传请求 ARQ 。
另外在中止等待协议中若收到重复分组,就丢弃该分组,但同时还要发送确认。
3) 确认丢失和确认迟到
连续 ARQ 协议可提升信道利用率。发送方维持一个发送窗口,凡位于发送窗口内的分组能够连续发送出去,而不须要等待对方确认。接收方通常采用累计确认,对按序到达的最后一个分组发送确认,代表到这个分组为止的全部分组都已经正确收到了。
优势: 信道利用率高,容易实现,即便确认丢失,也没必要重传。
缺点: 不能向发送方反映出接收方已经正确收到的全部分组的信息。 好比:发送方发送了 5条 消息,中间第三条丢失(3号),这时接收方只能对前两个发送确认。发送方没法知道后三个分组的下落,而只好把后三个所有重传一次。这也叫 Go-Back-N(回退 N),表示须要退回来重传已经发送过的 N 个消息。
TCP 利用滑动窗口实现流量控制。流量控制是为了控制发送方发送速率,保证接收方来得及接收。 接收方发送的确认报文中的窗口字段能够用来控制发送方窗口大小,从而影响发送方的发送速率。将窗口字段设置为 0,则发送方不能发送数据。
在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏。这种状况就叫拥塞。拥塞控制就是为了防止过多的数据注入到网络中,这样就能够使网络中的路由器或链路不致过载。
拥塞控制所要作的都有一个前提,就是网络可以承受现有的网络负荷。拥塞控制是一个全局性的过程,涉及到全部的主机,全部的路由器,以及与下降网络传输性能有关的全部因素。相反,流量控制每每是点对点通讯量的控制,是个端到端的问题。流量控制所要作到的就是抑制发送端发送数据的速率,以便使接收端来得及接收。
为了进行拥塞控制,TCP 发送方要维持一个 拥塞窗口(cwnd) 的状态变量。拥塞控制窗口的大小取决于网络的拥塞程度,而且动态变化。发送方让本身的发送窗口取为拥塞窗口和接收方的接受窗口中较小的一个。
TCP的拥塞控制采用了四种算法,即 慢开始 、 拥塞避免 、快重传 和 快恢复。在网络层也能够使路由器采用适当的分组丢弃策略(如主动队列管理 AQM),以减小网络拥塞的发生。
在HTTP/1.0中默认使用短链接。也就是说,客户端和服务器每进行一次HTTP操做,就创建一次链接,任务结束就中断链接。当客户端浏览器访问的某个HTML或其余类型的Web页中包含有其余的Web资源(如JavaScript文件、图像文件、CSS文件等),每遇到这样一个Web资源,浏览器就会从新创建一个HTTP会话。
而从HTTP/1.1起,默认使用长链接,用以保持链接特性。使用长链接的HTTP协议,会在响应头加入这行代码:Connection:keep-alive
在使用长链接的状况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP链接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经创建的链接。Keep-Alive不会永久保持链接,它有一个保持时间,能够在不一样的服务器软件(如Apache)中设定这个时间。实现长链接须要客户端和服务端都支持长链接。
HTTP协议的长链接和短链接,实质上是TCP协议的长链接和短链接。
HTTP 是一种不保存状态,即无状态(stateless)协议。也就是说 HTTP 协议自身不对请求和响应之间的通讯状态进行保存。那么咱们保存用户状态呢?Session 机制的存在就是为了解决这个问题,Session 的主要做用就是经过服务端记录用户的状态。典型的场景是购物车,当你要添加商品到购物车的时候,系统不知道是哪一个用户操做的,由于 HTTP 协议是无状态的。服务端给特定的用户建立特定的 Session 以后就能够标识这个用户而且跟踪这个用户了(通常状况下,服务器会在必定时间内保存这个 Session,过了时间限制,就会销毁这个Session)。
在服务端保存 Session 的方法不少,最经常使用的就是内存和数据库(好比是使用内存数据库redis保存)。既然 Session 存放在服务器端,那么咱们如何实现 Session 跟踪呢?大部分状况下,咱们都是经过在 Cookie 中附加一个 Session ID 来方式来跟踪。
Cookie 被禁用怎么办?
最经常使用的就是利用 URL 重写把 Session ID 直接附加在URL路径的后面。
Cookie 和 Session 都是用来跟踪浏览器用户身份的会话方式,可是二者的应用场景不太同样。
Cookie 通常用来保存用户信息 ,好比
① 咱们在 Cookie 中保存已经登陆过得用户信息,下次访问网站的时候页面能够自动帮你登陆的一些基本信息给填了;
②通常的网站都会有保持登陆也就是说下次你再访问网站的时候就不须要从新登陆了,这是由于用户登陆的时候咱们能够存放了一个 Token 在 Cookie 中,下次登陆的时候只须要根据 Token 值来查找用户便可(为了安全考虑,从新登陆通常要将 Token 重写);
③登陆一次网站后访问网站其余页面不须要从新登陆。Session 的主要做用就是经过服务端记录用户的状态。 典型的场景是购物车,当你要添加商品到购物车的时候,系统不知道是哪一个用户操做的,由于 HTTP 协议是无状态的。服务端给特定的用户建立特定的 Session 以后就能够标识这个用户而且跟踪这个用户了。
Cookie 数据保存在客户端(浏览器端),Session 数据保存在服务器端。
Cookie 存储在客户端中,而Session存储在服务器上,相对来讲 Session 安全性更高。若是要在 Cookie 中存储一些敏感信息,不要直接写入 Cookie 中,最好能将 Cookie 信息加密而后使用到的时候再去服务器端解密。
Connection: keep-alive
。 HTTP/1.1的持续链接有非流水线方式和流水线方式 。流水线方式是客户在收到HTTP的响应报文以前就能接着发送新的请求报文。与之相对应的非流水线方式是客户在收到前一个响应后才能发送下一个请求。URI 的做用像身份证号同样,URL的做用更像家庭住址同样。URL是一种具体的URI,它不只惟一标识资源,并且还提供了定位该资源的信息。
简单来讲,HTTPS 就是披着 SSL/TLS 外衣的 HTTP