网络面试知识

客户端与服务端的网络通信

  • 1、socket函数
    在网络编程中所需要进行的第一件事情就是创建一个socket,无论是客户端还是服务器端,都需要创建一个socket,该函数返回socket文件描述符,类似于文件描述符。
  • 2、connect函数
    客户端创建了socket后,需要和服务器端建立连接,此时使用connect函数和服务器端进行连接。
    connect返回失败后,该套接字不再可用,必须关闭,不能对这样的套接字再次调用connect。
  • bind函数
    把一个本地协议地址和套接口绑定,比如把本机的2222端口绑定到套接口。注意:为什么在上图中客户端不需要调用bind函数?这是因为如果没有调用bind函数绑定一个端口的话,当调用connect函数时,内核会为该套接口临时选定一个端口,因此可以不用绑定。而服务器之所以需要绑定的原因就是,所以客户端都需要知道服务器使用的哪个端口,所以需要提前绑定。
  • listen函数
    当socket创建后,它通常被默认为是主动套接口,也就是说是默认为要马上调用connect函数的,而作为服务器是需要被动接受的,所以需要调用linsten函数将主动套接口转换成被动套接口。调用linsten函数后,内核将从该套接口接收连接请求。
  • accept函数
    此函数返回已经握手完成的连接的套接口。注意:此处的套接口不同于服务器开始创建的监听套接口,此套接口是已经完成连接的套接口,监听套接口只是用来监听。

客户端

int socket (int family ,int type ,int protocol)
int connect (int sockfd , const struct sockaddr *servaddr , socklen_t addrlen)	// 自动绑定在了一个临时的端口上,并触发3次握手
int close (int sockfd);​

服务器

int socket (int family ,int type ,int protocol)
int bind (int sockfd,const struct sockaddr *myaddr,socklen_t addrlen)	// 绑定在一个众所周知的端口上
int listen(int sockfd, int backlog);	// 把主动套接口转为被动套接口
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);	// 阻塞,直到连接建立,返回一个连接套接字
int close (int sockfd);

在这里插入图片描述
参考:
Linux的TCP接口介绍
linux网络编程之二TCP套接口编程

TCP三次握手

由客户端调用connect函数触发,TCP的三次握手。

三次握手

在这里插入图片描述
假设 A 为客户端,B 为服务器端。
首先 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 的确认后,连接建立。

三次握手的原因

在这里插入图片描述
第三次握手是为了防止失效的连接请求到达服务器,让服务器错误打开连接。
客户端发送的连接请求如果在网络中滞留,那么就会隔很长一段时间才能收到服务器端发回的连接确认。客户端等待一个超时重传时间之后,就会重新请求连接。但是这个滞留的连接请求最后还是会到达服务器,如果不进行三次握手,那么服务器就会打开两个连接。如果有第三次握手,客户端会忽略服务器之后发送的对滞留连接请求的连接确认,不进行第三次握手,因此就不会再次打开连接。

TCP四次挥手

在这里插入图片描述

  • 1.第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。
  • 2.第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。
  • 3.第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。
  • 4.第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1, Server进入CLOSED状态,完成四次挥手。
    在这里插入图片描述

其他

浏览器地址栏输入网站按回车后发生了什么?

在这里插入图片描述
1:解析网址,生成 HTTP 请求信息
2:根据 DNS 服务器查询真实请求的 IP 地址,如果本地服务器有缓存则直接返回
3:得到了 IP 以后,向服务器发送 TCP 连接,TCP 连接经过三次握手。
4:接受 TCP 报文后,对连接进行处理,对 HTTP 协议解析
5:服务器返回响应
6:浏览器接受响应,显示页面,渲染页面

HTTP和HTTPS的区别

HTTP(HyperText Transfer Protocol)和 HTTPS(HyperText Transfer Protocol Secure)是用于在客户端和服务器之间传输数据的协议,它们之间的主要区别在于安全性:

HTTPS增加了【证书认证+加密传输】

数据传输安全性:

HTTP:数据传输是明文的,不加密,容易被拦截和窃听。
HTTPS:数据传输通过 SSL/TLS 加密,保障数据的安全性和机密性,防止拦截和窃听。
协议和端口:

HTTP:使用的是 80 端口。
HTTPS:使用的是 443 端口。
证书和身份验证:

HTTP:不需要证书,不进行身份验证。
HTTPS:需要使用 SSL/TLS 证书,服务器端的证书用于验证服务器的身份,保证通信双方的身份和数据的完整性。

https的请求过程?

参考:常见网络编程面试题以及答案(网络面试30题)

GET/POST的区别

数据位置:

GET:数据附加在 URL 查询字符串中,例如:http://example.com/page?param1=value1&param2=value2
POST:数据包含在请求的消息体中,不可见于 URL。
数据长度限制:

GET:由于数据附加在 URL 中,长度受限于 URL 长度限制,不适合传输大量数据。
POST:没有固定的数据长度限制,适合传输大量数据。
安全性:

GET:因为数据暴露在 URL 中,不适合传输敏感数据,如密码。
POST:数据在请求体中,更适合传输敏感数据。
可书签化:

GET:由于数据在 URL 中,可以被书签保存。
POST:不适合被书签保存,因为数据不在 URL 中。
幂等性:

GET:通常是幂等的,多次请求不会引起状态变化。
POST:不一定是幂等的,多次请求可能引起状态变化,比如向服务器提交表单。
浏览器行为:

GET:请求会被浏览器缓存,如果用户刷新页面,浏览器会直接使用缓存。
POST:浏览器不会缓存 POST 请求,刷新页面会重新发送请求。
用途:

GET:用于获取数据,不应该对服务器端数据产生副作用。
POST:用于提交数据,可以修改服务器端数据。
总的来说,GET 适合获取数据,而 POST 适合提交数据,根据具体的需求和情况选择合适的请求方法。

User
HTTP和HTTPS的区别
ChatGPT
HTTP(HyperText Transfer Protocol)和 HTTPS(HyperText Transfer Protocol Secure)是用于在客户端和服务器之间传输数据的协议,它们之间的主要区别在于安全性:

数据传输安全性:

HTTP:数据传输是明文的,不加密,容易被拦截和窃听。
HTTPS:数据传输通过 SSL/TLS 加密,保障数据的安全性和机密性,防止拦截和窃听。
协议和端口:

HTTP:使用的是 80 端口。
HTTPS:使用的是 443 端口。
证书和身份验证:

HTTP:不需要证书,不进行身份验证。
HTTPS:需要使用 SSL/TLS 证书,服务器端的证书用于验证服务器的身份,保证通信双方的身份和数据的完整性。
速度和性能:

HTTP:由于不需要加密和解密过程,通常比 HTTPS 更快一些。
HTTPS:由于加密和解密的过程,相对于 HTTP 会稍微慢一些。
SEO(搜索引擎优化):

HTTP:在搜索引擎中可能会受到一定的影响,因为搜索引擎越来越倾向于支持安全的网站。
HTTPS:在搜索引擎中有一定的优势,对于 SEO 有一定的好处。
总之,HTTPS 提供了更高的安全性和隐私保护,特别是在涉及用户隐私信息的网站上,使用 HTTPS 是非常重要的。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值