激活、维持、关闭通讯端点之间的机械特性、电气特性、功能特性以及过程特性。该层为上层协议提供了一个传输数据的可靠的物理媒体。简单的说,物理层确保原始的数据可在各类物理媒体上传输。物理层记住两个重要的设备名称,中继器(Repeater,也叫放大器)和集线器。html
2)数据链路层(Data Link Layer)linux
数据链路层在物理层提供的服务的基础上向网络层提供服务,其最基本的服务是将源自网络层来的数据可靠地传输到相邻节点的目标机网络层。为达到这一目的,数据链路必须具有一系列相应的功能,主要有:如何将数据组合成数据块,在数据链路层中称这种数据块为帧(frame),帧是数据链路层的传送单位;如何控制帧在物理信道上的传输,包括如何处理传输差错,如何调节发送速率以使与接收方相匹配;以及在两个网络实体之间提供数据链路通路的创建、维持和释放的管理。数据链路层在不可靠的物理介质上提供可靠的传输。该层的做用包括:物理地址寻址、数据的成帧、流量控制、数据的检错、重发等。面试
有关数据链路层的重要知识点:算法
1> 数据链路层为网络层提供可靠的数据传输;编程
2> 基本数据单位为帧;浏览器
3> 主要的协议:以太网协议;缓存
4> 两个重要设备名称:网桥和交换机。安全
3)网络层(Network Layer)bash
网络层的目的是实现两个主机系统之间的数据透明传送,具体功能包括寻址和路由选择、链接的创建、保持和终止等。它提供的服务使传输层不须要了解网络中的数据传输和交换技术。若是您想用尽可能少的词来记住网络层,那就是“路径选择、路由及逻辑寻址”。服务器
网络层中涉及众多的协议,其中包括最重要的协议,也是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,地址解析协议)可当作是跨网络层和链路层的协议;
RARP协议(Reverse Address Resolution Protocol,逆地址解析协议)。
4> 重要的设备:路由器。
4)传输层(Transport Layer)
第一个端到端,即主机到主机的层次。传输层负责将上层数据分段并提供端到端的、可靠的或不可靠的传输。此外,传输层还要处理端到端的差错控制和流量控制问题。
5)会话层
会话层管理主机之间的会话进程,即负责创建、管理、终止进程之间的会话。会话层还利用在数据中插入校验点来实现数据的同步。
6)表示层
表示层对上层数据或信息进行变换以保证一个主机应用层信息能够被另外一个主机的应用程序理解。表示层的数据转换包括数据的加密、压缩、格式转换等。
7)应用层
是最靠近用户的OSI层,为用户的应用程序提供网络服务的接口。将用户的操做经过应用程序转换成为服务,并匹配一个相应的服务协议发送给传输层。
注:咱们在传输数据时,能够只使用(传输层)TCP/IP协议,可是那样的话,若是没有应用层,便没法识别数据内容,若是想要使传输的数据有意义,则必须使用到应用层协议。
会话层、表示层和应用层重点:
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协议工做流程:
逆地址解析协议,即RARP,功能和ARP协议相对,其将局域网中某个主机的物理地址转换为IP地址,好比局域网中有一台主机只知道物理地址而不知道IP地址,那么能够经过RARP协议发出征求自身IP地址的广播请求,而后由RARP服务器负责回答。
RARP协议工做流程:
(1)给主机发送一个本地的RARP广播,在此广播包中,声明本身的MAC地址而且请求任何收到此请求的RARP服务器分配一个IP地址;
(2)本地网段上的RARP服务器收到此请求后,检查其RARP列表,查找该MAC地址对应的IP地址;
TCP和UDP是OSI模型中的运输层中的协议。TCP提供可靠的通讯传输,而UDP则常被用于让广播和细节控制交给应用的通讯传输。
二者的区别大体以下:
TCP:当对网络通信质量有要求的时候,好比:整个数据要准确无误的传递给对方,这每每用于一些要求可靠的应用,好比HTTP、HTTPS、FTP等传输文件的协议,POP、SMTP等邮件传输的协议。
在平常生活中,常见使用TCP协议的应用如:浏览器,用的HTTP;
FlashFXP,用的FTP;
Outlook,用的POP、SMTP;
Putty,用的Telnet、SSH;
QQ文件传输
UDP:当强调传输性能而不是传输的完整性时, 要求网络通信速度能尽可能的快。如:QQ语音 QQ视频等。
TCP对应的协议:
UDP对应的协议:
详见博客连接(重点)以及《计算机网络》(谢希仁)。
在TCP/IP协议中,TCP协议提供可靠的链接服务,链接是经过三次握手进行初始化的。三次握手的目的是同步链接双方的序列号和确认号并交换TCP窗口大小信息
端口详解连接(百度百科)
注意区别硬件端口。
确认机制、重传机制、滑动窗口。
传输层没法保证数据的可靠传输,只能经过应用层来实现了。实现的方式能够参照tcp可靠性传输的方式,只是实现不在传输层,实现转移到了应用层。
实现确认机制、重传机制、窗口确认机制。
若是你不利用linux协议栈以及上层socket机制,本身经过抓包和发包的方式去实现可靠性传输,那么必须实现以下功能:
发送:包的分片、包确认、包的重发
接收:包的调序、包的序号确认
注:
1)给数据包编号,按照包的顺序接收并存储;
2)接收端接收到数据包后发送确认信息给发送端,发送端接收确认数据之后再继续发送下一个包,若是接收端收到的数据包的编号不是指望的编号,则要求发送端从新发送。
目前有以下开源程序利用udp实现了可靠的数据传输。分别为RUDP、RTP、UDT。
一、应用层:客户端浏览器经过DNS解析到www.baidu.com的IP地址220.181.27.48,经过这个IP地址找到客户端到服务器的路径。客户端浏览器发起一个HTTP会话到220.161.27.48,而后经过TCP进行封装数据包,输入到网络层。
二、运输层:在客户端的传输层,把HTTP会话请求分红报文段,添加源和目的端口,如服务器使用80端口监听客户端的请求,客户端由系统随机选择一个端口如5000,与服务器进行交换,服务器把相应的请求返回给客户端的5000端口。而后使用IP层(网络层)的IP地址查找目的端。
三、网络层:客户端的网络层不用关心应用层或者传输层的东西,主要作的是经过查找路由表肯定如何到达服务器,期间可能通过多个路由器,这些都是由路由器来完成的工做,我不做过多的描述,无非就是经过查找路由表决定经过那个路径到达服务器。
四、链路层:客户端的链路层,包经过链路层发送到路由器,经过邻居协议查找给定IP地址的MAC地址,而后发送ARP请求查找目的地址,若是获得回应后就可使用ARP的请求应答交换的IP数据包如今就能够传输了,而后发送IP数据包到达服务器的地址。
HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。
HTTP是一个基于TCP/IP通讯协议来传递数据,默认端口号为80。
HTTP工做原理
HTTP协议定义Web客户端如何从Web服务器请求Web页面,以及服务器如何把Web页面传送给客户端。
HTTP 请求/响应的步骤
一、客户端链接到Web服务器
一个HTTP客户端,一般是浏览器,与Web服务器的HTTP端口(默认为80)创建一个TCP套接字链接。例如,http://www.oakcms.cn。
二、发送HTTP请求
经过TCP套接字,客户端向Web服务器发送一个文本的请求报文,一个请求报文由请求行、请求头部、空行和请求数据4部分组成。
三、服务器接受请求并返回HTTP响应
Web服务器解析请求,定位请求资源。服务器将资源复本写到TCP套接字,由客户端读取。一个响应由状态行、响应头部、空行和响应数据4部分组成。
四、释放链接TCP链接
若connection 模式为close,则服务器主动关闭TCP链接,客户端被动关闭链接,释放TCP链接;若connection 模式为keepalive,则该链接会保持一段时间,在该时间内能够继续接收请求;
五、客户端浏览器解析HTML内容
客户端浏览器首先解析状态行,查看代表请求是否成功的状态代码。而后解析每个响应头,响应头告知如下为若干字节的HTML文档和文档的字符集。客户端浏览器读取响应数据HTML,根据HTML的语法对其进行格式化,并在浏览器窗口中显示。
HTTP消息结构
HTTP是基于客户端/服务端(C/S)的架构模型
客户端发送一个HTTP请求到服务器的请求消息包括如下格式:请求行(request line)、请求头部(header)、空行和请求数据四个部分组成,请求报文的通常格式
HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文。
状态码告知从服务器端返回的请求结果。
200 (成功) 服务器已成功处理了请求。 一般。
304 (未修改) 自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容。
1:400 (错误请求) 服务器不理解请求的语法。 2:403 (禁止) 服务器拒绝请求。 3:404 (未找到) 服务器找不到请求的网页。
500 (服务器内部错误) 服务器遇到错误,没法完成请求。 501 (还没有实施) 服务器不具有完成请求的功能。 例如,服务器没法识别请求方法时可能会返回此代码。 502 (错误网关) 服务器做为网关或代理,从上游服务器收到无效响应。 503 (服务不可用) 服务器目前没法使用(因为超载或停机维护)。 一般,这只是暂时状态。 504 (网关超时) 服务器做为网关或代理,可是没有及时从上游服务器收到请求。 505 (HTTP 版本不受支持) 服务器不支持请求中所用的 HTTP 协议版本。
重点:200,304,403,404,500
一、https协议须要到ca申请证书,通常免费证书较少,于是须要必定费用。
二、http是超文本传输协议,信息是明文传输,https则是具备安全性的ssl加密传输协议。
三、http和https使用的是彻底不一样的链接方式,用的端口也不同,前者是80,后者是443。
四、http的链接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
在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协议的长链接和短链接。
当DNS客户机须要在程序中使用名称时,它会查询DNS服务器来解析该名称。客户机发送的每条查询信息包括三条信息:包括:指定的DNS域名,指定的查询类型,DNS域名的指定类别。基于UDP服务,端口53. 该应用通常不直接为用户使用,而是为其余应用服务,如HTTP,SMTP等在其中须要完成主机名到IP地址的转换。
路由选择协议的任务就是要肯定数据报在源与目的地之间采用的路径。
路由选择协议分为:静态的和动态的。Internet中使用的是动态路由选择协议,在Internet的概念中,将整个互联网划分为许多个小的自治系统(AS)。AS的最主要的特征:一个AS对其余AS表现出的是一个单一 和一致的路由选择策略。
因为AS的存在,路由选择协议又分为两种:
网络万一阻塞了呢?发出去的请求包在规定时间内没有收到ACK,无论是请求包丢失,仍是ACK包丢失,仍是网络延迟,总之,这里都是须要有个重传机制的。TCP的重传机制有两种:超时重传和快速重传。
说白了就是在请求包发出去的时候,开启一个计时器,当计时器达到时间以后,没有收到ACK,则就进行重发请求的操做,一直重发直到达到重发上限次数或者收到ACK。
还有一种机制就是快速重传,当接收方收到的数据包是不正常的序列号,那么接收方会重复把应该收到的那一条ACK重复发送,这个时候,若是发送方收到连续3条的同一个序列号的ACK,那么就会启动快速重传机制,把这个ACK对应的发送包从新发送一次。具体能够参考:
TCP粘包是指发送方发送的若干包数据到接收方接收时粘成一包,从接收缓冲区看,后一包数据的头紧接着前一包数据的尾。
(1)发送方缘由
咱们知道,TCP默认会使用Nagle算法。而Nagle算法主要作两件事:1)只有上一个分组获得确认,才会发送下一个分组;2)收集多个小分组,在一个确认到来时一块儿发送。
因此,正是Nagle算法形成了发送方有可能形成粘包现象。
(2)接收方缘由
TCP接收到分组时,并不会马上送至应用层处理,或者说,应用层并不必定会当即处理;实际上,TCP将收到的分组保存至接收缓存里,而后应用程序主动从缓存里读收到的分组。这样一 来,若是TCP接收分组的速度大于应用程序读分组的速度,多个包就会被存至缓存,应用程序读时,就会读到多个首尾相接粘到一块儿的包。
(1)若是发送方发送的多个分组原本就是同一个数据的不一样部分,好比一个很大的文件被分红多个分组发送,这时,固然不须要处理粘包的现象;
(2)但若是多个分组本绝不相干,甚至是并列的关系,咱们就必定要处理粘包问题了。
(1)发送方
对于发送方形成的粘包现象,咱们能够经过关闭Nagle算法来解决,使用TCP_NODELAY选项来关闭Nagle算法。
(2)接收方
遗憾的是TCP并无处理接收方粘包现象的机制,咱们只能在应用层进行处理。
(3)应用层处理
应用层的处理简单易行!而且不只能够解决接收方形成的粘包问题,还能解决发送方形成的粘包问题。
解决方法就是循环处理:应用程序在处理从缓存读来的分组时,读完一条数据时,就应该循环读下一条数据,直到全部的数据都被处理;可是如何判断每条数据的长度呢?
两种途径:
1)格式化数据:每条数据有固定的格式(开始符、结束符),这种方法简单易行,但选择开始符和结束符的时候必定要注意每条数据的内部必定不能出现开始符或结束符;
2)发送长度:发送每条数据的时候,将数据的长度一并发送,好比能够选择每条数据的前4字节是数据的长度(一个int来储存数据长度大小),应用层处理时能够根据长度来判断每条数据的开始和结束。
详细还能够参考此博客:连接
注: