1.TCP和UDP的区别
用户数据报协议 UDP(User Datagram Protocol) 是无连接的,尽最大可能交付,没有拥塞控制,面向报文(对于应用程序传下来的报文不合并也不拆分,只是添加UDP首部),支持一对一、一对多、多对一和多对多的交互通信。
传输控制协议 TCP(Transmission Control Protocol) 是面向连接的,提供可靠交付,有流量控制,拥塞控制,提供全双工通信,面向字节流(把应用层传下来的报文看成字节流,把字节流组织成大小不等的数据块),每一条 TCP 连接只能是点对点的(一对一)。
- TCP面向连接, UDP面向无连接的
- TCP有保障的,UDP传输无保障的
- TCP是效率低的,UDP效率高的
- TCP是基于流的,UDP基于数据报文
- TCP传输重要数据,UDP传输不重要的数据
2. TCP三次握手
首先 B 处于 LISTEN(监听)状态,等待客户的连接请求。A 向 B 发送连接请求报文,SYN=1,ACK=0,选择一个初始的序号 x。
B 收到连接请求报文,如果同意建立连接,则向 A 发送连接确认报文,SYN=1,ACK=1,确认号为 x+1,同时也选择一个初始的序号 y。
A 收到 B 的连接确认报文后,还要向 B 发出确认,确认号为 y+1,序号为 x+1。
B 收到 A 的确认后,连接建立。
3.三次握手的原因
第三次握手是为了防止失效的连接请求到达服务器,让服务器错误打开连接。
客户端发送的连接请求如果在网络中滞留,那么就会隔很长一段时间才能收到服务器端发回的连接确认。客户端等待一个超时重传时间之后,就会重新请求连接。但是这个滞留的连接请求最后还是会到达服务器,如果不进行三次握手,那么服务器就会打开两个连接。如果有第三次握手,客户端会忽略服务器之后发送的对滞留连接请求的连接确认,不进行第三次握手,因此就不会再次打开连接。
4.TCP四次挥手
以下描述不讨论序号和确认号,因为序号和确认号的规则比较简单。并且不讨论 ACK,因为 ACK 在连接建立之后都为 1。
A 发送连接释放报文,FIN=1。
B 收到之后发出确认,此时 TCP 属于半关闭状态,B 能向 A 发送数据但是 A 不能向 B 发送数据。
当 B 不再需要连接时,发送连接释放报文,FIN=1。
A 收到后发出确认,进入 TIME-WAIT 状态,等待 2 MSL(最大报文存活时间)后释放连接。
B 收到 A 的确认后释放连接。
5.四次挥手的原因
客户端发送了 FIN 连接释放报文之后,服务器收到了这个报文,就进入了 CLOSE-WAIT状态。这个状态是为了让服务器端发送还未传送完毕的数据,传送完毕之后,服务器会发送 FIN 连接释放报文。
6.TIME_WAIT
客户端接收到服务器端的 FIN 报文后进入此状态,此时并不是直接进入 CLOSED 状态,还需要等待一个时间计时器设置的时间 2MSL。这么做有两个理由:
确保最后一个确认报文能够到达。如果 服务器端没收到客户端发送来的确认报文,那么就会重新发送连接释放请求报文,A 等待一段时间就是为了处理这种情况的发生。
等待一段时间是为了让本连接持续时间内所产生的所有报文都从网络中消失,使得下一个新的连接不会出现旧的连接请求报文。
7.一个URL从输入到浏览器地址栏开始都发生了什么
输入url
应用层DNS解析域名( 客户端先检查本地是否有对应的IP地址,若找到则返回响应的IP地址。若没找到则请求上级DNS服务器,直至找到或到根节点。)
应用层客户端发送HTTP请求
传输层TCP传输报文
网络层IP协议查询MAX地址
数据到达数据链路层
服务器接收数据
服务器响应请求
服务器返回响应文件
页面渲染
8.编写socket套接字的步骤
服务器端程序的编写步骤:
第一步:调用socket()函数创建一个用于通信的套接字。
第二步:给已经创建的套接字绑定一个端口号,这一般通过设置网络套接口地址和调用bind()函数来实现。
第三步:调用listen()函数使套接字成为一个监听套接字。
第四步:调用accept()函数来接受客户端的连接,这是就可以和客户端通信了。
第五步:处理客户端的连接请求。
第六步:终止连接。
客户端程序编写步骤:、
第一步:调用socket()函数创建一个用于通信的套接字。
第二步:通过设置套接字地址结构,说明客户端与之通信的服务器的IP地址和端口号。
第三步:调用connect()函数来建立与服务器的连接。
第四步:调用读写函数发送或者接收数据。
第五步:终止连接。
9.Http协议
http(超文本传输协议)是一个基于请求与响应模式的、无状态的、应用层的协议,常基于TCP的连接方式,HTTP1.1版本中给出一种持续连接的机制,绝大多数的Web开发,都是构建在HTTP协议之上的Web应用。
10.OSPF stub区域
OSPFSTUB区域是一个末梢区域,当一个OSPF区域处于整个自治系统边界时,而又不含其他路由协议,这时就可以配置OSPF Stub区域。
当配置OSPF Stub区域后,Stub区域中的路由器会增加一条至ABR的默认路由条目,当在ABR上配置了完全末梢区域后,末梢区域的其他路由器的路由条目除了直连的路由条目歪,只有一条到达ABR的默认路由条目,不会学习其他区域的路由条目,到其他区域的数据包通过ABR转发。这样减少了末梢区域其他路由器的路由条目和路由传递的数量,提高路由器的性能。
Stub区域限制:
- 所有位于stub area的路由器必须保持LSDB信息同步,并且他们会在它的Hello包中设置一个值为0的E位(E-bit),因此这些路由器是不会接受E位为1的Hello包,也就是说在stub area里没有配置成stub router的路由器不能和其他配置成stub router的路由器建立邻接关系。
- 不能在stub area中配置虚连接,并且虚连接不能穿越stub area。
- stub area里的路由器不可以是ASBR(自治系统边界路由器)。
- stub area可以有多个ABR(区域边界路由器),但是由于默认路由的缘故,内部路由器无法判定哪个ABR才是到达ASBR的最佳选择。
STUB区域对LSA的影响如下:
- 从其他区域来的汇总LSA被引入。
- 缺省路由作为一个路由汇总被引入。
- 外部LSA不被引入。
11.OSI七层模型
应用层,表示层,会话层(前三层是数据),传输层(分段),网络层(分组(数据报)),数据链路层(帧),物理层(比特)。
12.Tcp/Ip模型:
应用层:应用层,表示层,会话层(后两个没有协议)
传输层:传输层
网际层:网络层
网络接口层:数据链路层,物理层
13.TCP/IP协议簇
OSI中的层 | 功能 | TCP/IP协议 |
---|---|---|
应用层 | 文件传输,电子邮件,文件服务,虚拟终端 | TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet |
表示层 | 数据格式化,代码转换,数据加密 | 没有协议 |
会话层 | 解除或建立与别的接点的联系 | 没有协议 |
传输层 | 提供端到端的接口,提供应用进程间的逻辑通信 差错检测,提供无连接或面向连接的服务 | TCP,UDP |
网络层 | 异构网络互联,路由选择与转发,拥塞控制 | IP,ICMP,RIP,OSPF,BGP,IGMP |
数据链路层 | 链路管理:负责数据链路的建立,维持和释放,主要用于面向连接的服务。 帧同步,差错控制,透明传输 | SLIP,CSLIP,PPP,ARP,RARP,MTU |
物理层 | 以二进制数据形式在物理媒体上传输数据 | ISO2110,IEEE802,IEE802.2 |
14.应用层:
应用层有哪些协议:
HTTP,SMTP,Telnet(远程终端访问),FTP,DNS,SIP(互联网电话)(只有他支持udp和tcp,其他都支持只支持TCP)
常用端口号:
HTTP:80
HTTPS:443
TELNET:23
FTP:20/21(控制连接21,数据连接20)
SMTP:25
DNS:53
FTP(文件传输协议):要使用两个TCP连接来传输文件
控制连接:用于两主机传说控制信息,如命令,标识等(先创建,贯穿整个会话期间)
数据连接:用于发送一个文件(后创建)
DNS:将域名解析为IP地址
域名空间:一个层次树状结构,根服务器—org,com,edu(顶级域服务器)—下一层(权威)
寻址:递归查询和迭代查询
(1)迭代:请求主机访问本地DNS服务器,本地DNS服务器先去访问上一级,然后上一级告诉他该去访问再上一级,然后本地服务器去访问再上一级,依次到得到结果
(2)递归:本地服务器去访问上一级,上一级去访问再上一级,得到结果再将结果一级一级传输过来
实际上只有主机跟本地服务器是递归,其他都是迭代的
DNS缓存:请求过后的就会缓存在DNS缓存中,一般2天后丢失
http的请求过程:1.域名解析2.三次握手创建TCP连接3.服务器响应传输数据4.四次挥手断开连接
https的请求过程:
- 客户端发送请求https连接
- 服务器返回加密公钥,通常是SSL证书
- 客户端从这个SSL证书解析出公钥,并随机生成一个key,通过公钥加密这个key发送给服务器(这一步是安全的因为只有服务器才有私钥能读出这个key)。
- 服务器通过私钥解密出key。
- 客户端使用这个key来加密需要传输的数据。
- 服务器使用key来解析数据。
http常见的状态码:
200 – 请求成功
301 – 资源(网页等)被永久转移到其它URL
302 – 资源(网页等)被暂时转移到其它URL
403 – 服务器拒绝请求
404 – 请求的资源(网页等)不存在
500 – 内部服务器错误
http和https的区别
http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议
http的端口是80,https的端口是443
Get和Post提交数据的区别
get的参数会显示在浏览器地址栏中,而post的参数不会显示在浏览器地址栏中;
用post可以提交的数据量非常大,而用get可以提交的数据量则非常小
post比get安全,get比post效率高
Cookie和Session的区别
cookie存放在客户机端,session存放在服务器端
Session比cookie更安全
cookie只能存4kb,session可以无限存
15.如果服务器出现大量closewait,为什么?
被动关闭方未关闭socket造成,那么自然不会发出 FIN 包,从而导致 CLOSE_WAIT 累积
----------------------------------待更新