计算机网络常见面试题

分享一个很好的博客:http://www.cnblogs.com/maybe2030/p/4781555.html#_label3

OSI,TCP/IP,五层协议的体系结构,以及各层协议

 

   1)物理层(Physical Layer)

  激活、维持、关闭通讯端点之间的机械特性、电气特性、功能特性以及过程特性。该层为上层协议提供了一个传输数据的可靠的物理媒体。简单的说,物理层确保原始的数据可在各类物理媒体上传输。物理层记住两个重要的设备名称,中继器(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)

  第一个端到端,即主机到主机的层次。传输层负责将上层数据分段并提供端到端的、可靠的或不可靠的传输。此外,传输层还要处理端到端的差错控制和流量控制问题。

  传输层的任务是根据通讯子网的特性,最佳的利用网络资源,为两个端系统的会话层之间,提供创建、维护和取消传输链接的功能,负责端到端的可靠数据传输。在这一层,信息传送的协议数据单元称为段或报文。做用: 为应用进程之间提供端到端的逻辑通讯。
   网络层只是根据网络地址将源结点发出的数据包传送到目的结点,而传输层则负责将数据可靠地传送到相应的端口
  有关传输层的重点:
  1> 传输层负责将上层数据分段并提供端到端的、可靠的或不可靠的传输以及端到端的差错控制和流量控制问题;
  2> 包含的主要协议:TCP协议(Transmission Control Protocol,传输控制协议)、UDP协议(User Datagram Protocol,用户数据报协议);
  3> 重要设备:网关。

  5)会话层

  会话层管理主机之间的会话进程,即负责创建、管理、终止进程之间的会话。会话层还利用在数据中插入校验点来实现数据的同步。

  6)表示层

  表示层对上层数据或信息进行变换以保证一个主机应用层信息能够被另外一个主机的应用程序理解。表示层的数据转换包括数据的加密、压缩、格式转换等。

  7)应用层

  是最靠近用户的OSI层,为用户的应用程序提供网络服务的接口将用户的操做经过应用程序转换成为服务,并匹配一个相应的服务协议发送给传输层

       注:咱们在传输数据时,能够只使用(传输层)TCP/IP协议,可是那样的话,若是没有应用层,便没法识别数据内容,若是想要使传输的数据有意义,则必须使用到应用层协议。

  会话层、表示层和应用层重点:

  1> 数据传输基本单位为报文;

  2> 包含的主要协议:FTP(文件传送协议)、Telnet(远程登陆协议)、DNS(域名解析协议)、SMTP(邮件传送协议),POP3协议(邮局协议),HTTP协议(Hyper Text Transfer Protocol)。

每一层的协议以下
物理层:RJ4五、CLOCK、IEEE802.3    (中继器,集线器,网关)
数据链路:PPP、FR、HDLC、VLAN、MAC  (网桥,交换机)
网络层:IP、ICMP、ARP、RARP、OSPF、IPX、RIP、IGRP、 (路由器)
传输层:TCP、UDP、SPX
会话层:NFS、SQL、NETBIOS、RPC
表示层:JPEG、MPEG、ASCII
应用层:FTP、DNS、Telnet、SMTP、HTTP、WWW、NFS
 

 IP地址

 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/RARP协议

地址解析协议,即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地址;

  (3)若是存在,RARP服务器就给源主机发送一个响应数据包并将此IP地址提供给对方主机使用;
  (4)若是不存在,RARP服务器对此不作任何的响应;
  (5)源主机收到从RARP服务器的响应信息,就利用获得的IP地址进行通信;若是一直没有收到RARP服务器的响应信息,表示初始化失败。

请简述TCP/UDP的区别

TCP和UDP是OSI模型中的运输层中的协议。TCP提供可靠的通讯传输,而UDP则常被用于让广播和细节控制交给应用的通讯传输。
二者的区别大体以下:

  • TCP面向链接,UDP面向非链接即发送数据前不须要创建连接
  • TCP提供可靠的服务(数据传输),UDP没法保证
  • TCP面向字节流,UDP面向报文
  • TCP数据传输慢,UDP数据传输快
  • TCP提供一种面向链接的、可靠的字节流服务
  • 在一个TCP链接中,仅有两方进行彼此通讯,所以广播和多播不能用于TCP
  • TCP使用校验和,确认和重传机制来保证可靠传输
  • TCP使用累积确认
  • TCP使用滑动窗口机制来实现流量控制,经过动态改变窗口的大小进行拥塞控制

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对应的协议:

  • FTP:定义了文件传输协议,使用21端口。
  • Telnet:一种用于远程登录的端口,使用23端口,用户能够以本身的身份远程链接到计算机上,可提供基于DOS模式下的通讯服务。
  • SMTP:邮件传送协议,用于发送邮件。服务器开放的是25号端口。
  • POP3:它是和SMTP对应,POP3用于接收邮件。POP3协议所用的是110端口。
  • HTTP:是从Web服务器传输超文本到本地浏览器的传送协议,端口默认80。

UDP对应的协议:

  • DNS:用于域名解析服务,将域名地址转换为IP地址。DNS用的是53号端口。
  • SNMP:简单网络管理协议,使用161号端口,是用来管理网络设备的。因为网络设备不少,无链接的服务就体现出其优点。
  • TFTP(Trival File TransferProtocal),简单文件传输协议,该协议在熟知端口69上使用UDP服务。

为何 TCP 叫数据流模式? UDP 叫数据报模式?

  • 所谓的“流模式”,是指TCP发送端发送几回数据和接收端接收几回数据是没有必然联系的,好比你经过 TCP链接给另外一端发送数据,你只调用了一次 write,发送了100个字节,可是对方能够分10次收完,每次10个字节;你也能够调用10次write,每次10个字节,可是对方能够一次就收完。
  • 缘由:这是由于TCP是面向链接的,一个 socket 中收到的数据都是由同一台主机发出,且有序地到达,因此每次读取多少数据均可以。

  • 所谓的“数据报模式”,是指UDP发送端调用了几回 write,接收端必须用相同次数的 read 读完。UDP是基于报文的,在接收的时候,每次最多只能读取一个报文,报文和报文是不会合并的,若是缓冲区小于报文长度,则多出的部分会被丢弃。
  • 缘由:这是由于UDP是无链接的,只要知道接收端的 IP 和端口,任何主机均可以向接收端发送数据。 这时候,若是一次能读取超过一个报文的数据, 则会乱套。

TCP中的流量控制和拥塞控制

注:tcp协议如何保证传输的可靠性

  • 流量控制主要针对的是端到端传输中控制流量大小并保证传输可靠性(未收到ack就不滑动)。流量控制每每是指点对点通讯量的控制,所要作的是抑制发送端发送数据的速率。
  • 拥塞控制主要是一个全局性过程,涉及到全部主机,路由器,以及与下降网络传输性能有关的全部因素。防止过多的数据注入到网络中。若是有发生丢包则经过拥塞控制减少窗口,肯定出合适(慢启动 拥塞避免 快重传 快恢复)的拥塞窗口(增性加乘性减)。

       详见博客连接(重点)以及《计算机网络》(谢希仁)。

说一说TCP的三次握手和四次挥手

在TCP/IP协议中,TCP协议提供可靠的链接服务,链接是经过三次握手进行初始化的。三次握手的目的是同步链接双方的序列号和确认号并交换TCP窗口大小信息

 

  • 核心思想:让双方都证明对方能发收。知道对方能收是由于收到对方的由于收到信息以后发的回应(ACK)。

详解见一个总结的很好的博客

请简单说一下你了解的端口及对应的服务

端口详解连接(百度百科)

端口

注意区别硬件端口。

  • 软件端口是应用层的各类协议进程与运输实体进行层间交互的一种地址。
  • 端口号只具备本地意义,它只为标志计算机应用层中的各个进程在和运输层交互时的层间接口,在互联网不一样计算机中,相同的端口号是没有关联的。
  • 两个计算机的进程相互通讯,不只须要知道对方的IP地址(为了找到对方计算机),还要知道对方的端口号(为了找到对方计算机中的应用进程)
  • 两大类:1.服务器端使用的端口号(经常使用熟知)2.客户端使用的端口号(短暂)。

 

TCP如何实现可靠性传输

确认机制、重传机制、滑动窗口。

 

UDP如何实现可靠性传输

传输层没法保证数据的可靠传输,只能经过应用层来实现了。实现的方式能够参照tcp可靠性传输的方式,只是实现不在传输层,实现转移到了应用层。

实现确认机制、重传机制、窗口确认机制。

若是你不利用linux协议栈以及上层socket机制,本身经过抓包和发包的方式去实现可靠性传输,那么必须实现以下功能:

发送:包的分片、包确认、包的重发

接收:包的调序、包的序号确认

注: 
1)给数据包编号,按照包的顺序接收并存储; 
2)接收端接收到数据包后发送确认信息给发送端,发送端接收确认数据之后再继续发送下一个包,若是接收端收到的数据包的编号不是指望的编号,则要求发送端从新发送。

目前有以下开源程序利用udp实现了可靠的数据传输。分别为RUDP、RTP、UDT。

在浏览器中输入www.baidu.com后执行的所有过程

一个总结的比较好的博客

一、应用层:客户端浏览器经过DNS解析到www.baidu.com的IP地址220.181.27.48,经过这个IP地址找到客户端到服务器的路径。客户端浏览器发起一个HTTP会话到220.161.27.48,而后经过TCP进行封装数据包,输入到网络层。

  • DNS解析过程

  • HTTP请求与响应

  二、运输层:在客户端的传输层,把HTTP会话请求分红报文段,添加源和目的端口,如服务器使用80端口监听客户端的请求,客户端由系统随机选择一个端口如5000,与服务器进行交换,服务器把相应的请求返回给客户端的5000端口。而后使用IP层(网络层)的IP地址查找目的端。

  三、网络层:客户端的网络层不用关心应用层或者传输层的东西,主要作的是经过查找路由表肯定如何到达服务器,期间可能通过多个路由器,这些都是由路由器来完成的工做,我不做过多的描述,无非就是经过查找路由表决定经过那个路径到达服务器。

  四、链路层:客户端的链路层,包经过链路层发送到路由器,经过邻居协议查找给定IP地址的MAC地址,而后发送ARP请求查找目的地址,若是获得回应后就可使用ARP的请求应答交换的IP数据包如今就能够传输了,而后发送IP数据包到达服务器的地址。

    

交换机、路由器的概念,并知道各自的用途

        交换机

  • 在计算机网络系统中,交换机是针对共享工做模式的弱点而推出的。交换机拥有一条高带宽的背部总线和内部交换矩阵。交换机的全部的端口都挂接在这条背部总线上,当控制电路收到数据包之后,处理端口会查找内存中的地址对照表以肯定目的MAC(网卡的硬件地址)的NIC(网卡)挂接在哪一个端口上,经过内部交换矩阵迅速将数据包传送到目的端口。目的MAC若不存在,交换机才广播到全部的端口,接收端口回应后交换机会“学习”新的地址,并把它添加入内部地址表中
  • 交换机工做于OSI参考模型的第二层,即数据链路层。交换机内部的CPU会在每一个端口成功链接时,经过ARP协议学习它的MAC地址,保存成一张ARP表。在从此的通信中,发往该MAC地址的数据包将仅送往其对应的端口,而不是全部的端口。所以,交换机可用于划分数据链路层广播,即冲突域;但它不能划分网络层广播,即广播域。

  路由器

  • 路由器(Router)是一种计算机网络设备,提供了路由与转发两种重要机制,能够决定数据包历来源端到目的端所通过的路由路径(host到host之间的传输路径),这个过程称为路由;将路由器输入端的数据包移送至适当的路由器输出端(在路由器内部进行),这称为转送。路由工做在OSI模型的第三层——即网络层,例如IP协议。
  • 路由器的一个做用是连通不一样的网络,另外一个做用是选择信息传送的线路。 路由器与交换器的差异,路由器是属于OSI第三层的产品,交换器是OSI第二层的产品(这里特指二层交换机)。

HTTP(超文本传输协议)

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响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文。

http常见状态码有哪些?

状态码告知从服务器端返回的请求结果。

  •  2开头状态码

    2xx (成功)表示成功处理了请求的状态代码
200 (成功) 服务器已成功处理了请求。 一般。
  • 3开头状态码

    3xx (重定向) 表示要完成请求,须要进一步操做。 一般,这些状态代码用来重定向。
304 (未修改) 自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容。
  • 4开头状态码

    4xx(请求错误) 这些状态代码表示请求可能出错,妨碍了服务器的处理
1:400 (错误请求) 服务器不理解请求的语法。
 
2:403 (禁止) 服务器拒绝请求。

3:404 (未找到) 服务器找不到请求的网页。
  • 5开头状态码

   5xx(服务器错误)这些状态代码表示服务器在尝试处理请求时发生内部错误。 这些错误多是服务器自己的错误,而不是请求出错
500 (服务器内部错误) 服务器遇到错误,没法完成请求。

501 (还没有实施) 服务器不具有完成请求的功能。 例如,服务器没法识别请求方法时可能会返回此代码。

502 (错误网关) 服务器做为网关或代理,从上游服务器收到无效响应。

503 (服务不可用) 服务器目前没法使用(因为超载或停机维护)。 一般,这只是暂时状态。

504 (网关超时) 服务器做为网关或代理,可是没有及时从上游服务器收到请求。

505 (HTTP 版本不受支持) 服务器不支持请求中所用的 HTTP 协议版本。

重点:200,304,403,404,500

HTTP与HTTPS区别

 

一、https协议须要到ca申请证书,通常免费证书较少,于是须要必定费用。

 

二、http是超文本传输协议,信息是明文传输,https则是具备安全性的ssl加密传输协议。

 

三、http和https使用的是彻底不一样的链接方式,用的端口也不同,前者是80,后者是443。

 

四、http的链接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

HTTPS工做原理

更容易理解的一个连接

 

HTTP1.0和HTTP1.1的区别

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域名,指定的查询类型,DNS域名的指定类别。基于UDP服务,端口53. 该应用通常不直接为用户使用,而是为其余应用服务,如HTTP,SMTP等在其中须要完成主机名到IP地址的转换。

路由选择协议

路由选择协议的任务就是要肯定数据报在源与目的地之间采用的路径。

路由选择协议分为:静态的和动态的。Internet中使用的是动态路由选择协议,在Internet的概念中,将整个互联网划分为许多个小的自治系统(AS)。AS的最主要的特征:一个AS对其余AS表现出的是一个单一 和一致的路由选择策略。

因为AS的存在,路由选择协议又分为两种:

  • 内部网关协议(IGP):即在一个AS内部使用的路由选择协议,而这与互联网中其余AS选用什么路由协议无关。好比:RIP,OSPF
  • 外部网关协议(EGP):若源主机和目的主机再也不同一个AS中,就须要使用一种协议将路由选择信息传递到另外一个AS中,这就是EGP。好比:BGP。

重传机制

网络万一阻塞了呢?发出去的请求包在规定时间内没有收到ACK,无论是请求包丢失,仍是ACK包丢失,仍是网络延迟,总之,这里都是须要有个重传机制的。TCP的重传机制有两种:超时重传快速重传

超时重传

说白了就是在请求包发出去的时候,开启一个计时器,当计时器达到时间以后,没有收到ACK,则就进行重发请求的操做,一直重发直到达到重发上限次数或者收到ACK。

快速重传

还有一种机制就是快速重传,当接收方收到的数据包是不正常的序列号,那么接收方会重复把应该收到的那一条ACK重复发送,这个时候,若是发送方收到连续3条的同一个序列号的ACK,那么就会启动快速重传机制,把这个ACK对应的发送包从新发送一次。具体能够参考:

 

TCP/IP通讯过程(以发送电子邮件为例)

socket通讯原理

网络编程中的基本概念

 

TCP粘包问题

1 什么是粘包现象

  TCP粘包是指发送方发送的若干包数据到接收方接收时粘成一包,从接收缓冲区看,后一包数据的头紧接着前一包数据的尾。

2 为何出现粘包现象

  (1)发送方缘由

  咱们知道,TCP默认会使用Nagle算法。而Nagle算法主要作两件事:1)只有上一个分组获得确认,才会发送下一个分组;2)收集多个小分组,在一个确认到来时一块儿发送。

  因此,正是Nagle算法形成了发送方有可能形成粘包现象。

  (2)接收方缘由

  TCP接收到分组时,并不会马上送至应用层处理,或者说,应用层并不必定会当即处理;实际上,TCP将收到的分组保存至接收缓存里,而后应用程序主动从缓存里读收到的分组。这样一         来,若是TCP接收分组的速度大于应用程序读分组的速度,多个包就会被存至缓存,应用程序读时,就会读到多个首尾相接粘到一块儿的包。

3 何时须要处理粘包现象

  (1)若是发送方发送的多个分组原本就是同一个数据的不一样部分,好比一个很大的文件被分红多个分组发送,这时,固然不须要处理粘包的现象;

  (2)但若是多个分组本绝不相干,甚至是并列的关系,咱们就必定要处理粘包问题了。

4 如何处理粘包现象

  (1)发送方

  对于发送方形成的粘包现象,咱们能够经过关闭Nagle算法来解决,使用TCP_NODELAY选项来关闭Nagle算法。

  (2)接收方

  遗憾的是TCP并无处理接收方粘包现象的机制,咱们只能在应用层进行处理。

  (3)应用层处理

  应用层的处理简单易行!而且不只能够解决接收方形成的粘包问题,还能解决发送方形成的粘包问题。

  解决方法就是循环处理:应用程序在处理从缓存读来的分组时,读完一条数据时,就应该循环读下一条数据,直到全部的数据都被处理;可是如何判断每条数据的长度呢?

  两种途径:

    1)格式化数据:每条数据有固定的格式(开始符、结束符),这种方法简单易行,但选择开始符和结束符的时候必定要注意每条数据的内部必定不能出现开始符或结束符;

    2)发送长度:发送每条数据的时候,将数据的长度一并发送,好比能够选择每条数据的前4字节是数据的长度(一个int来储存数据长度大小),应用层处理时能够根据长度来判断每条数据的开始和结束。

详细还能够参考此博客:连接

TCP协议中的三次握手四次挥手以及11种状态转换

连接地址

注:

TIME_WAIT状态的做用:
一、可靠地实现TCP的链接终止。
在终止TCP链接时有4个报文须要交换,其中最后一个ACK报文是由客户端发往服务器。假设这个ACK报文在网络中被丢弃了,那么服务器端收不到这个确认ACK,服务器端会向客户端再次发送FIN。这就是为何TIME_WAIT状态持续2倍的最长报文段生存时间:1MSL时间留给最后的ACK确认报文段到达服务器端,1MSL时间留给服务器端再次发送的FIN。
二、确保老的重复的报文段在网络中过时失效,这样创建新的链接时将再也不接受它们。
TCP协议采用的是出错重传,也就是会生成重复的报文,而且根据路由器的选择,这些重复的报文可能在链接终止后才到达,若是客户端/服务器端收到这个老的报文会把它误认为一个同一链接的新的报文,而后对这个报文进行处理,这样就会出现错误。从状态转换图咱们能够看到从TIME_WAIT到链接终止,中间有2MSL,这个时间足以让老的重复的报文段过时失效。
相关文章
相关标签/搜索