网络知识总结

一、TCP和UDP的区别

  1. TCP提供面向连接的、可靠的数据流传输,而UDP提供的是非面向连接的、不可靠的数据流传输。
  2. TCP传输单位称为TCP报文段,UDP传输单位称为用户数据报
  3. TCP注重数据安全性,UDP数据传输快,因为不需要连接等待,少了许多操作,但是其安全性却一般
  4. TCP对应的协议和UDP对应的协议不同

TCP对应的协议:

  1. FTP:定义了文件传输协议,使用21端口
  2. Telnet:一种用于远程登陆的端口,使用23端口,用户可以以自己的身份远程连接到计算机上,可提供基于DOS模式下的通信服务
  3. SMTP:邮件传送协议,用于发送邮件。服务器开放的是25号端口
  4. POP3:它是和SMTP对应,POP3用于接收邮件。POP3协议所用的是110端口
  5. HTTP:是从Web服务器传输超文本到本地浏览器的传送协议

UDP对应的协议:

  1. DNS:用于域名解析服务,将域名地址转换为IP地址。DNS用的是53号端口
  2. SNMP:简单网络管理协议,使用161号端口,是用来管理网络设备的。由于网络设备很多,无连接的服务就体现出其优势。
  3. TFTP(Trival File Transfer Protocal),简单文件传输协议,该协议在熟知端口69上使用UDP服务

二、TCP、UDP报头格式

  2.1 TCP报头格式

                                    

(1)序号:Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。
(2)确认序号:Ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,Ack=Seq+1。
(3)标志位:共6个,即URG、ACK、PSH、RST、SYN、FIN等,具体含义如下:

  1. URG:紧急指针(urgent pointer)有效
  2. ACK:确认序号有效
  3. PSH:接收方应该尽快将这个报文交给应用层
  4. RST:重置连接
  5. SYN:发起一个新连接
  6. FIN:释放一个连接

 2.2 UDP报头格式

                     

三、TCP三次握手和四次挥手的全过程

   3.1、三次握手:

                                  

  1. 第一次握手:客户端发送请求报文标志位SYN=1和确认号seq=x到服务器,并进入SYN_SEND状态,等待服务器确认;
  2. 第二次握手:服务器收到客户端请求报文后,如果同意连接,则发出确认报文,ACK=1,SYN=1,确认号是Ack=x+1,同时也要为自己初始化一个序号 seq=y,此时服务器进入SYN_RECV状态;    
  3. 第三次握手:客户端收到服务器确认报文后,需向服务器发送确认报文,标志位ACK=1,确认号Ack=y+1,此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。

1)SYN攻击:
       在三次握手过程中,Server发送SYN-ACK之后,收到Client的ACK之前的TCP连接称为半连接(half-open connect),此时Server处于SYN_RCVD状态,当收到ACK后,Server转入ESTABLISHED状态。SYN攻击就是Client在短时间内伪造大量不存在的IP地址,并向Server不断地发送SYN包,Server回复确认包,并等待Client的确认,由于源地址是不存在的,因此,Server需要不断重发直至超时,这些伪造的SYN包将产时间占用未连接队列,导致正常的SYN请求因为队列满而被丢弃,从而引起网络堵塞甚至系统瘫痪。SYN攻击时一种典型的DDOS攻击,检测SYN攻击的方式非常简单,即当Server上有大量半连接状态且源IP地址是随机的,则可以断定遭到SYN攻击了,使用如下命令可以让之现行:#netstat -nap | grep SYN_RECV

2)TCP的三次握手过程?为什么会采用三次握手,若采用二次握手可以吗?

      假设主机A为客户端,主机B为服务器端。采用三次握手是为了防止失效的连接请求报文段突然又传送到主机B,因而产生错误。失效的连接请求报文段是指:主机A发出的连接请求没有收到主机B的确认,于是经过一段时间后,主机A又重新向主机B发送连接请求,且建立成功,顺序完成数据传输。考虑这样一种特殊情况,主机A第一次发送的连接请求并没有丢失,而是因为网络节点导致延迟达到主机B,主机B以为是主机A又发起的新连接,于是主机B同意连接,并向主机A发回确认,但是此时主机A根本不会理会,主机B就一直在等待主机A发送数据,导致主机B的资源浪费

3)如果已经建立了连接,但是客户端突然出现故障了怎么办?

    TCP还设有一个保活计时器,显然,客户端如果出现故障,服务器不能一直等下去,白白浪费资源。服务器每收到一次客户端的请求后都会重新复位这个计时器,时间通常是设置为2小时,若两小时还没有收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔75分钟发送一次。若一连发送10个探测报文仍然没反应,服务器就认为客户端出了故障,接着就关闭连接。

扫描二维码关注公众号,回复: 2750932 查看本文章

   3.2、四次挥手

                                    å次æ¥æ

  1. 第一次挥手:Client发送释放连接报文FIN=1,seq=u(u是客户端最后一次序号加1)到Server,Client进入FIN_WAIT_1状态。
  2. 第二次挥手:Server收到Client释放报文后,发送确认报文ACK=1,确认号ack=u+1,同时初始序号seq=v给Client,Server进入CLOSE_WAIT状态。
  3. 第三次挥手:Server发出释放连接报文FIN=1,ACK=1,ack=u+1,seq=w给Client,Server进入LAST_ACK状态。
  4. 第四次挥手:Client收到服务器释放连接报文后,Client进入TIME_WAIT状态,接着发送确认报文ACK=1,seq=u+1,ack=w+1给Server,Server进入CLOSED状态,完成四次挥手。

1)为什么建立连接是三次握手,而关闭连接却是四次挥手呢?
        这是因为服务端在LISTEN状态下,收到建立连接请求的SYN报文后,把ACK和SYN放在一个报文里发送给客户端。而关闭连接时,己方ACK和FIN是分开发送的。可能原因是服务器可能还在发送数据给客户端,没有关闭数据接口的意思,所以先发ACK确认报文,随后才发了FIN,表示不再发送数据。(发送FIN,表示不再发送数据,但是可以接受数据)

2) 为什么客户端最后还要等待2MSL(最长报文段寿命)?

  1.  保证客户端发送的最后一个ACK报文能够到达服务器,因为这个ACK报文可能丢失
  2. 防止类似与“三次握手”中提到了的“已经失效的连接请求报文段”出现在本连接中。客户端发送完最后一个确认报文后,在这个2MSL时间中,就可以使本连接持续的时间内所产生的所有报文段都从网络中消失。这样新的连接中不会出现旧连接的请求报文

四、TCP长连接和短链接

    长连接:指在一个TCP连接上可以连续发送多个数据包,在TCP连接保持期间,如果没有数据包发送,需要双方发检测包以维持此连接,一般需要自己做在线维持(不发生RST包和四次挥手)。

    短链接:短连接是指通信双方有数据交互时,就建立一个TCP连接,数据发送完成后,则断开此TCP连接。

   在HTTP/1.0中,默认使用的是短连接。从 HTTP/1.1起,默认使用长连接,会在响应头有加入这行代码Connection:keep-alive,Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。实现长连接要客户端和服务端都支持长连接。长连接多用于操作频繁(读写),点对点的通讯,而且连接数不能太多情况下。HTTP协议的长连接和短连接,实质上是TCP协议的长连接和短连接

五、TCP/IP如何实现数据可靠传输的

TCP/IP可靠传输的基础是滑动窗口协议和连续ARQ协议,配合着流量控制和拥塞控制,使得整个传输过程保证:

  • 传输信道不产生差错
  • 不管发送方以多快的速度发送数据,接收方总是来得及处理收到的数据(通过累计确认、超时重传、拥塞控制三大模块保证)

详情访问https://blog.csdn.net/qq_33314107/article/details/81607630

六、Http和Https区别

  1. http是超文本传输协议,信息是明文传输,HTTPS协议是由SSL+HTTP协议组成,比http协议安全
  2. https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
  3. 端口不一样,前者是80,后者是443

七、Http请求

  1. 首先,与服务器的HTTP端口(默认为80)建立一个TCP套接字连接
  2. 通过TCP套接字,客户端向Web服务器发送一个请求报文(一个请求报文由请求行、请求头部、空行和请求数据4部分组成)
  3. 服务器解析请求,定位请求资源。服务器将资源写到TCP套接字,由客户端读取(一个响应由状态行、响应头部、空行和响应数据4部分组成)
  4. 若connection 模式为close,则服务器主动关闭TCP连接,客户端被动关闭连接;若connection 模式为keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求;
  5. 客户端浏览器解析服务器响应内容

八、HTTPS请求过程

  1. 客户端发送请求到服务器端
  2. 服务器端返回证书(包括公开密钥)给客户端
  3. 客户端验证证书有效性,如果有效,则生成共享密钥并使用公钥加密数据发送到服务器端
  4. 服务器端使用私有密钥解密数据,并使用收到的共享密钥加密数据,发送到客户端
  5. 客户端使用共享密钥解密数据

九、HTTP之状态码

状态代码有三位数字组成,第一个数字定义了响应的类别,共分五种类别:

1xx:指示信息--表示请求已接收,继续处理

2xx:成功--表示请求已被成功接收、理解、接受

3xx:重定向--要完成请求必须进行更进一步的操作

4xx:客户端错误--请求有语法错误或请求无法实现

5xx:服务器端错误--服务器未能实现合法的请求

常见状态码:

200 OK                        //客户端请求成功
400 Bad Request               //客户端请求有语法错误,不能被服务器所理解
401 Unauthorized              //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用 
403 Forbidden                 //服务器收到请求,但是拒绝提供服务
404 Not Found                 //请求资源不存在,eg:输入了错误的URL
500 Internal Server Error     //服务器发生不可预期的错误
503 Server Unavailable        //服务器当前不能处理客户端的请求,一段时间后可能恢复正常

十、GET和POST请求的区别

  1.  GET提交,请求的数据会附在URL之后(就是把数据放置在HTTP协议头中),以?分割URL和传输数据,多个参数用&连接;POST提交:把提交的数据放置在是HTTP包的包体中。
  2. 安全性:POST的安全性要比GET的安全性高。比如:通过GET提交数据,用户名和密码将明文出现在URL上,因为(1)登录页面有可能被浏览器缓存;(2)其他人查看浏览器的历史纪录,那么别人就可以拿到你的账号和密码了,除此之外,使用GET提交数据还可能会造成CSRF(Cross-site request forgery)跨站请求伪造攻击(防御 CSRF 攻击主要有三种策略:验证 HTTP Referer 字段;在请求地址中添加 token 并验证;在 HTTP 头中自定义属性并验证。)
  3. 传输数据的大小:首先声明:HTTP协议没有对传输的数据大小进行限制,HTTP协议规范也没有对URL长度进行限制。GET:特定浏览器和服务器对URL长度有限制,例如 IE对URL长度的限制是2083字节(2K+35)。对于其他浏览器,如Netscape、FireFox等,理论上没有长度限制,其限制取决于操作系 统的支持。POST:由于不是通过URL传值,理论上数据不受 限。但实际各个WEB服务器会规定对post提交数据大小进行限制,Apache、IIS6都有各自的配置

十一、Session和Cookie机制

    HTTP协议本身是无状态的,本身并不能支持服务端保存客户端的状态信息,引入了session和cookie概念。Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。

   11.1 Cookie机制:

  1. Cookie的不可跨域名性
  2. 中文属于Unicode字符,在内存中占4个字符,而英文属于ASCII字符,内存中只占2个字节。Cookie中使用Unicode字符时需要对Unicode字符进行编码,否则会乱码
Cookie cookie = new Cookie("time","20080808"); // 新建Cookie
cookie.setDomain(".helloweenvsfei.com");           // 设置域名
cookie.setPath("/");                              // 设置路径
cookie.setMaxAge(Integer.MAX_VALUE);               // 设置有效期
response.addCookie(cookie);                       // 输出到客户端

   11.2 Session机制:

         1)Session的工作原理:

            1、当一个用户向服务器发送第一个请求时,服务器为其建立一个session,并为此session创建一个标识号;

            2、这个用户随后的所有请求都应包括这个标识号。服务器会校对这个标识号以判断请求属于哪个session。这种机制不使用IP作为标识,是因为很多机器是通过代理服务器方式上网,没法区分每一台机器。对于session标识号(JSESSIONID),有两种方式实现:cookies和URL重写。

         2)Session周期:

          Session创建:Sessinon在用户访问第一次访问服务器时创建,需要注意只有访问JSP、Servlet等程序时才会创建Session,只访问HTML、IMAGE等静态资源并不会创建Session,可调用request.getSession(true)强制生成Session。

             Session失效:1.服务器会把长时间没有活动的Session从服务器内存中清除,此时Session便失效。Tomcat中Session的默认失效时间为20分钟。 2. 调用Session的invalidate方法

十二、DNS解析过程

  1. 在浏览器中输入www.qq.com域名,浏览器首先会在自己的缓存中查找是否有该域名对应的IP地址(若曾经访问过该域名且没有清空缓存便存在)。
  2. 当浏览器缓存中无域名对应IP时操作系统会先检查自己本地的hosts文件是否有这个网址映射关系,如果有,就先调用这个IP地址映射,完成域名解析。
  3. 如果hosts里没有这个域名的映射,则查找本地DNS解析器缓存,是否有这个网址映射关系,如果有,直接返回,完成域名解析
  4. 如果hosts与本地DNS解析器缓存都没有相应的网址映射关系,首先会找TCP/ip参数中设置的首选DNS服务器,在此我们叫它本地DNS服务器,此服务器收到查询时,如果要查询的域名,包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析,此解析具有权威性。
  5. 如果要查询的域名,不由本地DNS服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个IP地址映射,完成域名解析,此解析不具有权威性。
  6. 如果本地DNS服务器本地区域文件与缓存解析都失效,则根据本地DNS服务器的设置(是否设置转发器)进行查询,如果未用转发模式,本地DNS就把请求发至13台根DNS,根DNS服务器收到请求后会判断这个域名(.com)是谁来授权管理,并会返回一个负责该顶级域名服务器的一个IP。本地DNS服务器收到IP信息后,将会联系负责.com域的这台服务器。这台负责.com域的服务器收到请求后,如果自己无法解析,它就会找一个管理.com域的下一级DNS服务器地址(qq.com)给本地DNS服务器。当本地DNS服务器收到这个地址后,就会找qq.com域服务器,重复上面的动作,进行查询,直至找到www.qq.com主机。 
  7. 如果用的是转发模式,此DNS服务器就会把请求转发至上一级DNS服务器,由上一级服务器进行解析,上一级服务器如果不能解析,或找根DNS或把转请求转至上上级,以此循环。不管是本地DNS服务器用是是转发,还是根提示,最后都是把结果返回给本地DNS服务器,由此DNS服务器再返回给客户机

十三、TCP/IP 四层模型和 OSI 七层模型

OSI七层模型

TCP/IP 四层模型

网络协议

应用层

(Application)

应用层

HTTP(超文本传输协议)

HTTPS(超文本传输安全协议)

FTP(文件传输协议)

SMTP(简单邮件传输协议)

DNS(域名服务)

等等

表示层

(Presentation)

会话层

(Session)

传输层

(Transport)

传输层

TCP(传输控制协议)

UDP(用户数据报协议)

网络层

(Network)

网际互连层

IP(网际协议)

ICMP(网络控制消息协议)

IGMP(网络组管理协议)

数据链路层

(Data Link)

网络接口层

以太网

Wi-Fi

等等

物理层

(Physical)

访问www.baidu.com的全过程:     

  1. 客户端浏览器通过DNS解析到www.baidu.com 的IP地址220.181.27.48,通过这个IP地址找到客户端到服务器的路径。客户端浏览器发起一个HTTP会话到220.181.27.48,然后通过TCP进行封装数据包,输入到网络层。
  2. 在客户端的传输层,把HTTP会话请求分成报文段,添加源和目的端口,如服务器使用80端口监听客户端的请求,客户端由系统随机选择一个端口如5000,与服务器进行交换,服务器把相应的请求返回给客户端的5000端口。然后使用IP层的IP地址查找目的端。
  3. 客户端的网络层不用关心应用层或者传输层的东西,主要做的是通过查找路由表确定如何到达服务器,期间可能经过多个路由器,这些都是由路由器来完成的工作,我不作过多的描述,无非就是通过查找路由表决定通过那个路径到达服务器。
  4. 客户端的链路层,包通过链路层发送到路由器,通过邻居协议查找给定IP地址的MAC地址,然后发送ARP请求查找目的地址,如果得到回应后就可以使用ARP的请求应答交换的IP数据包现在就可以传输了,然后发送IP数据包到达服务器的地址 

十四、IP地址的分类

  1. A类地址:以0开头,   第一个字节范围:1~126(1.0.0.0 - 126.255.255.255);
  2. B类地址:以10开头,  第一个字节范围:128~191(128.0.0.0 - 191.255.255.255);
  3. C类地址:以110开头, 第一个字节范围:192~223(192.0.0.0 - 223.255.255.255);
  4. D类地址:以1110开头,第一个字节范围:224~239(224.0.0.0 - 239.255.255.255);(作为多播使用)
  5. E类地址:保留

   其中A、B、C是基本类,D、E类作为多播和保留使用。

   以下是留用的内部私有地址:

  • A类 10.0.0.0--10.255.255.255
  • B类 172.16.0.0--172.31.255.255
  • C类 192.168.0.0--192.168.255.255

   IP地址(例:192.168.2.110)与子网掩码(例:255.255.255.0)相与得到网络号(例:192.168.2  .0)

十五、ARP(地址解析协议)工作原理

  1. 首先,每个主机都会在自己的ARP缓冲区中建立一个ARP列表,以表示IP地址和MAC地址之间的对应关系
  2. 当源主机要发送数据时,首先检查ARP列表中是否有对应IP地址的目的主机的MAC地址,如果有,则直接发送数据,如果没有,就向本网段的所有主机发送ARP数据包,该数据包包括的内容有:源主机 IP地址,源主机MAC地址,目的主机的IP 地址
  3. 当本网络的所有主机收到该ARP数据包时,首先检查数据包中的IP地址是否是自己的IP地址,如果不是,则忽略该数据包,如果是,则首先从数据包中取出源主机的IP和MAC地址写入到ARP列表中,如果已经存在,则覆盖,然后将自己的MAC地址写入ARP响应包中,告诉源主机自己是它想要找的MAC地址
  4. 源主机收到ARP响应包后。将目的主机的IP和MAC地址写入ARP列表,并利用此信息发送数据。如果源主机一直没有收到ARP响应数据包,表示ARP查询失败
  5. 广播发送ARP请求,单播发送ARP响应

十六、RARP逆地址解析协议

     作用是完成硬件地址到IP地址的映射,主要用于无盘工作站,因为给无盘工作站配置的IP地址不能保存。工作流程:在网络中配置一台RARP服务器,里面保存着IP地址和MAC地址的映射关系,当无盘工作站启动后,就封装一个RARP数据包,里面有其MAC地址,然后广播到网络上去,当服务器收到请求包后,就查找对应的MAC地址的IP地址装入响应报文中发回给请求者。因为需要广播请求报文,因此RARP只能用于具有广播能力的网络

十七、交换机和路由器的区别

  1. 工作层次不同:最初的的交换机是工作在OSI/RM开放体系结构的数据链路层,也就是第二层,而路由器一开始就设计工作在OSI模型的网络层。由于交换机工作在OSI的第二层(数据链路层),所以它的工作原理比较简单,而路由器工作在OSI的第三层(网络层),可以得到更多的协议信息,路由器可以做出更加智能的转发决策。
  2. 数据转发所依据的对象不同:交换机是利用物理地址或者说MAC地址来确定转发数据的目的地址。而路由器则是利用不同网络的ID号(即IP地址)来确定数据转发的地址。IP地址是在软件中实现的,描述的是设备所在的网络,有时这些第三层的地址也称为协议地址或者网络地址。MAC地址通常是硬件自带的,由网卡生产商来分配的,而且已经固化到了网卡中去,一般来说是不可更改的。而IP地址则通常由网络管理员或系统自动分配
  3. 传统的交换机只能分割冲突域,不能分割广播域;而路由器可以分割广播域:由交换机连接的网段仍属于同一个广播域,广播数据包会在交换机连接的所有网段上传播,在某些情况下会导致通信拥挤和安全漏洞。连接到路由器上的网段会被分配成不同的广播域,广播数据不会穿过路由器。虽然第三层以上交换机具有VLAN功能,也可以分割广播域,但是各子广播域之间是不能通信交流的,它们之间的交流仍然需要路由器
  4. 路由器提供了防火墙的服务:路由器仅仅转发特定地址的数据包,不传送不支持路由协议的数据包传送和未知目标网络数据包的传送,从而可以防止广播风暴。交换机一般用于LAN-LAN的连接,交换机归于网桥,是数据链路层的设备,有些交换机也可实现第三层的交换。路由器用于WAN-WAN之间的连接,可以解决异性网络之间转发分组,作用于网络层。他们只是从一条线路上接受输入分组,然后向另一条线路转发。这两条线路可能分属于不同的网络,并采用不同协议。相比较而言,路由器的功能较交换机要强大,但速度相对也慢,价格昂贵,第三层交换机既有交换机线速转发报文能力,又有路由器良好的控制功能,因此得以广泛应用
  5. 总之,可以这么认为,交换机在具体的城域网中往往扮演着VLAN透传的角色,就是桥。而路由器默认的是不支持二层的,路由器的每一个端口都是一个独立的广播域冲突域,而交换机是只有一个广播域和端口数量的冲突域,在二层交换机上存在MAC表,三层交换机上存在路由表.MAC.ARP表,在路由器上存在路由表和arp表。比如当一个路由器上有一个2层的vlan100和另外一个路由器上的3层vlan100对接的时候,是不通的,这时候我们需要借助L2VPN技术来进行互通,比较流行的就是VPLS技术。

猜你喜欢

转载自blog.csdn.net/qq_33314107/article/details/81606819
今日推荐