1、OSI七层、TCP/IP四层的关系和区别?
OSI七层从小网上:物理层、数据链路层、 网络层、传输层、 会话层、表示层、应用层
TCP/IP 四层:网络接口层、 网络层、传输层、 应用层
1、TCP 与 UDP 的区别
TCP:是一种面向连接的、可靠的、基于字节流的传输层通信协议。
UDP | TCP | |
---|---|---|
是否连接 | 无连接 | 面向连接 |
是否可靠 | 不可靠传输,不使用流量控制和拥塞控制 | 可靠传输,使用流量控制和拥塞控制 |
连接对象个数 | 支持一对一,一对多,多对一,多对多,交互通信 | 只能是一对一通信 |
传输方式 | 面向报文 | 面向字节流 |
首部开销 | 首部开销小,8个字节 | 首部最少20字节,最多60字节 |
适用场景 | 使用实时应用(IP电话、视频会议) | 使用要求可靠传输的应用(文件传输) |
TCP 向上层提供面向连接的可靠服务 ,UDP 向上层提供无连接不可靠服务。
UDP 没有 TCP 传输可靠,但是可以在实时性要求搞的地方有所作为。
对数据准确性要求高,速度可以相对较慢的,可以选用TCP。
2、TCP 是如何实现数据的可靠性?
通过校验和、序列号、确认应答、超时重传、连接管理、流量控制、拥塞控制等机制来保证可靠性。
3、说说 TCP 协议如何提高传输效率?
TCP 协议提高效率的方式有滑动窗口、快重传、延迟应答、捎带应答等。
4、你知道 TCP 如何处理拥塞吗?
网络拥塞现象是指到达通信网络中某一部分的分组数量过多,使得该部分网络来不及处理,以致引起这部分乃至整个网络性能下降的现象,严重时甚至会导致网络通信业务陷入停顿,即出现死锁现象。拥塞控制是处理网络拥塞现象的一种机制。
拥塞控制四个阶段:慢启动 拥塞避免 快速重传 快速恢复
5、三次握手和四次挥手全过程
1、第一次握手:是由客户端发起,客户端会向服务端发送一个报文,在报文里面: SYN 同步标志位置为1,表示发起新的连接。(客户端->服务端 SYN=1)
2、第二次握手:当服务端收到这个报文之后就知道客户端要和我建立一个新的连接,于是服务端就向客户端发送一个确认消息包,在这个消息包里面:ACK确认标志位置为 1, 表示确认客户端发起的第一次连接请求。(服务端->客户端 ACK=1)
3、第三次握手:当客户端收到服务端发送的确认响应报文之后,还要继续去给服务端进行回应,也是一个ACK标志位置 1 的确认消息。(客户端->服务端 ACK=1)
以上两次握手之后,对于客户端而言:已经明确了我既能给服务端成功发消息,也能成功收到服务端的响应。但是对于服务端而言:两次握手是不够的,服务端只知道一件事,客户端发给我的消息我能收到,但是我响应给客户端的消息,客户端能不能收到我是不知道的。所以,还需要进行第三次握手。
总结通过以上三次连接,不管是客户端还是服务端,都知道我既能给对方发送消息,也能收到对方的响应。那么,这个连接就被安全的建了。
TCP连接的释放(四次挥手)
四次挥手也是客户端发起的:
1、第一次挥手: 客户端会发送一个报文,报文 FIN 终止=1,当客户端收到这个报文之后,就知道了客户端想要和我断开连接,但是此时服务端不一定做好准备,因为当客户端发起断开连接的报文的时候,服务端有可能还有未发送完的报文消息需要继续发送。(客户端->服务端 FIN=1)
2、第二次挥手:此时服务端只能告诉客户端我知道你要和我断开连接了 ACK=1,但是我这里可能还没做好准备。(服务端->客户端 ACK=1)
3、第三次挥手:发完这个消息确认报(ACK=1)之后,稍过片刻之后服务端继续发送一个断开连接的报文FIN=1,表明服务端已经做好断开连接的准备。(服务端->客户端 FIN=1)
4、第四次挥手:当这个消息发给客户端的时候, 客户端同样需要继续发送一个消息确认的报文ACK=1。(客户端->服务端 ACK=1)
总结:那么通过这四次的相互沟通和连接,我就知道了,不管是客户端还是服务端,都已经做好了断开的准备。
6、IP地址是怎样分类的?
-
IP地址由四段组成,每个字段是一个字节,8位,最大值是255。
-
IP地址由两部分组成,即网络地址和主机地址。网络地址表示其属于互联网的哪一个网络,主机地址表示其属于该网络中的哪一台主机。全零(“0.0.0.0”)地址对应于当前主机。
-
全“1”的IP地址(“255.255.255.255”)是当前子网的广播地址。 (16.255.255.255)
-
127.0.0.1 本机的回送地址,用来测试本机进程间的通信和网络测试。
A类:(1.0.0.0-126.0.0.0)一般用于大型网络。
B类:(128.0.0.0-191.255.0.0)一般用于中等规模网络。
C类:(192.0.0.0-223.255.255.0)一般用于小型网络。
D类:是多播地址,地址的网络号取值于224~239之间,一般用于多路广播用户。
E类:是保留地址。地址的网络号取值于240~255之间。
2、HTTP和HTTPS的区别
1、HTTPS 协议需要到 CA 申请证书,一般免费证书较少,因而需要一定费用。
2、HTTP 是超文本传输协议,信息是明文传输,HTTPS 则是具有安全性的 SSL 加密传输协议。
3、HTTP 和 HTTPS 使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。4、4、HTTP 的连接很简单,是无状态的;HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,比 HTTP 协议安全。
3、Get与POST的区别
1、GET 一般用来从服务器上获取资源,POST 一般用来创建资源;
2、GET 是幂等的,即读取同一个资源,总是得到相同的数据,而 POST 不是幂等的。GET 不会改变服务器上的资源,而 POST 会对服务器资源进行改变;
3、从请求参数形式上看,GET 请求的数据会附在URL之后;而 POST 请求会把提交的数据则放置在是HTTP请求报文的请求体中。
4、POST 的安全性要比 GET 的安全性高,因为 GET 请求提交的数据将明文出现在 URL 上,而 POST 请求参数则被包装到请求体中,相对更安全。
5、GET 请求的长度受限于浏览器或服务器对URL长度的限制,允许发送的数据量比较小,而POST请求则是没有大小限制的。
4、DNS 的寻址过程你知道吗?
域名解析 -> 建立TCP连接(三次握手)-> 发起http请求 -> 服务器响应http请求,浏览器得到html代码 -浏览器解析html代码,并请求html代码中的资源(如 js、css、图片等)-> 浏览器对页面进行渲染呈献给用户。
5、计算机网络五层模型
物理层 数据链路层 网络层 传输层 应用层
6、OSI模型
物理层 | 网络通信的数据传输介质,负责数据流传输(为数据端设备提供原始比特流的传输通路)(中继器、网线) |
---|---|
数据链路层 | (通过循环校验检测数据) 在通信实体间建立数据链路连接。(网卡 、网桥)帧 |
网络层 | 用于设备间建立路由,并分组转发数据 (分组(数据包)) (路由器) |
传输层 | 向用户提供可靠的端到端的服务,提供应用进程间的逻辑通信。(传输层对数据的完整性进行负责,如果数据丢失,将要求对方重发) TCP UDP |
会话层 | 建立端连接并提供访问验证和会话管理。 |
表示层 | 提供数据格式转换服务 |
应用层 | 为应用软件提供服务,访问网络服务的接口 |
7、TCP/IP参考模型
应用层 | 向用户提供常用的应用程序(FTP,SMTP,DNS)(文本传输协议,电子邮件,域名服务) |
---|---|
传输层 | (TCP层)主要负责应用进程之间的端对端通信。(TCP,传输控制协议)(UDP,用户数据包协议) |
网络层 | (IP层)负责处理互联网中计算机之间的通信,想传输层提供统一的数据包 |
数据链路层 | 接收网络层的IP数据包,通过网络向外发送。 主机和网络的实际连接 |
8、TCP/IP协议
底层的数据包封装上层的包,然后向下层传送,所以实际系统是IP包包含了TCP的内容的,发送数据的时候的过程是app程序使用tcp的端口向ip层发送tcp的数据,ip层收到后加上ip header继续向下层发送,一直到物理层的端口上。比如我们用的水晶头,发送到对端去,对端收到后执行反方向的操作一直到app层中解出原始的数据来使用。
当接收到来自TCP的数据后,如果在IP层或TCP层数据校验失败的话,(TCP层可以做循环冗余校验)如果发现错误,不会传递给app层(应用层),通过ACK等信息进行封装, 并发到IP层,一直发到对端TCP层,对端TCP层就知道没收到这个数据包或者收到有问题,进行重发。
IP协议:
1、解决网络互通问题
2、数据包由数据包正文和报头组成。数据包正文是要传递的数据,没有格式要求。
//报头包括:发送主机的网络地址、接收主机的网络地址、数据包的报头校验和、数据包长度等信息。
//主要功能:
1、数据包传输、数据包路由选择、拥塞控制。
2、两台主机在通信之前不需要建立连接,网络主机使用同一的IP数据包,可以保持不同的物理网络间可以传递和识别数据。
3、如果是同一网段,那么可以直接传输过去,不同的子网,IP协议通过路由获得主机间的传输路径,通过交换机或服务器接力的方式传递数据。
(拥塞控制: 假设主机A给主机B传输数据。如果发送方一直没有收到接收方反馈的确认消息,那么发送方认为发送的数据包丢失,将重新发送数据包,这是太多主机占用信道资源,导致网络拥塞,不仅浪费信道资源,还会造成网络拥塞,所以要进行拥塞控制)
TCP协议:
1、TCP协议是传输层协议,保证数据传递的完整性。
2、端口号等信息可以区别同一计算机不同应用程序的数据。
3、把大的数据切成小的数据包。
4、TCP协议处理单位为字节。
//主要功能:
1、建立、维持和终结两个进程之间的连接。
2、可靠的包传递(经过确认的过程)
3、控制差错的机制(校验位)
4、全双工操作的数据交换
1、控制位:(6位)
URG:紧急指示字段
ACk:应答确认 对已接收的数据包进行确认
SYN:建立同步序号 用于建立会话连接,同步序列号
FIN:结束总包文,数据不再从连接的发送点进入。 表示我已经没有数据要发送了,即将关闭连接;
2、TCP的首部长度:20个字节
TCP端口号:2个字节
9、tcp大端小端的问题
小端字节序:低字节存于内存低地址;高字节存于内存高地址;
long 型数据 0x12345678
地址 数据
0x00000100 0x78
0x00000101 0x56
0x00000102 0x34
0x00000103 0x12
大端字节序:高字节存于内存低地址;低字节存于内存高地址;
UDP/TCP/IP协议规定:把接收到的第一个字节当作高位字节看待,这就要求发送端发送的第一个字节是高位字节;内存中因该是以大端法存放的;
//发送的数据应该是应用层的数据,是由对方的应用程序处理的,置于大端还是小端,当然由处理数据的程序决定。
//ip之类的数据,是有通信协议规范的,字节序由通信协议决定。
10、TCP长短连接
//长连接:(适合频繁的读写操作,点对点通信,连接数不能太多)
1、指在一个TCP连接上可以连续发送多个数据包,在TCP连接保持阶段,如果没有数据包的发送,需要双发发送检测包维持连接。
//短链接:(频繁的创建socket对资源的浪费)(http服务一般都用短链接)
1、指通信双方有数据交互的时候,就建立一个TCP连接,数据发送完成后,就断开此TCP连接
11、UDP协议(用户数据报文协议)
1、无连接、不可靠的传输服务。
2、接收数据时不向发送发提供确认信息,也不提供输入包的顺序。
3、如果出现丢包或者重复包的情况,也不会向发送方发出差错报文。
//主要作用
分配和管理端口的编号,正确识别运行在网络站点上的个别应用程序。
1、任何与UDP相配合作为传输层服务的应用程序,必须提供确认和顺序系统,以确保已发送时的顺序到达。
12、Linux Socket编程
计算机中的两个程序通过socket建立起一个通道,数据在通道中传输:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-b7ReBnpl-1628688569160)(C:\Users\WangChang\AppData\Roaming\Typora\typora-user-images\image-20210811204913869.png)]
分类:
1、流(基于TCP),是一个双向、有序、可靠的通道,传输数据不会丢失、不会重复、顺序也不会出错。
2、数据报(基于UDP),不需要建立和维持连接,可能会错乱。(不常用)
服务端的工作流程:
1)创建服务端的socket。
2)把服务端用于通信的地址和端口绑定到socket上。
3)把socket设置为监听模式。
4)接受客户端的连接。
5)与客户端通信,接收客户端发过来的报文后,回复处理结果。
6)不断的重复第5)步,直到客户端断开连接。
7)关闭socket,释放资源。
客户端的工作流程:
1)创建客户端的socket。
2)向服务器发起连接请求。
3)与服务端通信,发送一个报文后等待回复,然后再发下一个报文。
4)不断的重复第3)步,直到全部的数据被发送完。
5)第4步:关闭socket,释放资源。
recv函数:
1、用于接收对端socket发送过来的数据。
2、如果socket的对端没有发送数据,recv函数就会等待,如果对端发送了数据,函数返回接收到的字符数。
3、出错时返回-1。如果socket被对端关闭,返回值为0。
4、如果recv函数返回的错误(<=0),表示通信通道已不可用。
程序退出时先关闭socket:
在程序退出之前必须关闭已打开的socket,就像关闭文件指针一样,就像delete已分配的内存一样,极其重要。
13、HTTP协议里面的host代表什么 http协议的格式
Host 是 HTTP 1.1 协议中新增的一个请求头,主要用来实现虚拟主机技术。
虚拟主机(virtual hosting)即共享主机(shared web hosting),可以利用虚拟技术把一台完整的服务器分成若干个主机,因此可以在单一主机上运行多个网站或服务。
HTTP:请求响应机制
HTTP底层协议:TCP 协议
TCP 的特点:面向连接,保证可靠性
面向连接:我要和对应的服务器进行通信,第一件事情就是要把连接建立好。
HTTP 是应用层协议,HTTP 用的是下层的 TCP协议,而 TCP 是保证可靠性的。
TCP 为了保证可靠性,所以 TCP 是面向连接的。
TCP 面向连接之前必须先建立连接——> HTTP 向通信就要在底层先把连接建立好。
然后,发送方根据已经建立好的连接向服务器发送一个请求。
发过去之后对方就可以根据这个完整地读出来,对方再分析这个报文,然后对这个报文做出响应,HTTP 请求结束,之后断开连接。
这种一来一回的形式成为短连接(一次请求一个)
//HTTP协议永远都是客户端发起请求,服务器回送响应
//HTTP的任务:
请求资源(从对方服务器将资源拿到)——更简单;
提交信息(处理数据),从客户端把数据推送到服务器。
//HTTP 方法:
GET:获取资源
POST:传输实体主体
PUT:传输文件
HEAD:获得报文首部(相当于GET方法获得的资源去掉正文)
DELETE:删除文件
OPTIONS:询问支持的方法(客户端问服务器)
TRACE:追踪路径
OCONNECT:要求用隧道协议连接代理
LINK:建立与资源之间的联系
UNLINE:断开连接关系
参考:https://www.sohu.com/a/339068354_774177