计算机网络
一、计算机网络体系结构

二、IP
ARP协议
ARP (Address Resolution Protocol),即地址解析协议,可以根据IP地址获取物理地址:
主机将包含目标IP地址的ARP请求广播到局域网的所有主机,并接收返回信息,以此确定目标主机的物理地址
收到返回信息后将该IP地址和物理地址存入本机ARP缓存中,下次请求时可以直接查询ARP缓存
三、TCP
面向连接的、可靠的、基于字节流的传输层通信协议
将应用层的数据流分割成报文段并发送给目标节点的TCP层
数据包有序号,对方收到则发送ACK确认,未收到则重传
使用校验和来检验数据在传输过程中是否有误
使用超时重传机制来实现可靠传输,如果一个已经发送的报文段在超时时间内没有收到确认,那么就重传这个报文段
1. 三次握手

首次握手隐患
SYN Flood:服务端收到客户端的SYN,回复SYN-ACK的时候未收到ACK确认,服务端会不断重试直到超时(Linux默认等待63秒才断开连接)
措施:SYN队列满后,服务端通过
tcp_syncookies
参数回发SYN Cookie,若为正常连接则客户端会回发SYN Cookie直到建立连接
三次握手原因
为了初始化双方的序列号
如何保持连接
服务端向客户端发送保活探测报文,如果未收到响应则继续发送
尝试次数达到保活探测数仍未收到响应则中断连接
2. 四次挥手

四次挥手原因
TCP是全双工通信,发送发和接收方都需要发送和接受FIN报文、ACK报文
TIME_WAIT状态
确保有足够的时间让对方收到ACK包
避免新旧连接混淆
CLOSE_WAIT状态
服务器出现大量CLOSE_WAIT状态原因:对方关闭socket,我方忙于读或写,没有及时关闭连接
措施:检查释放资源的代码、检查处理请求的线程配置
3. 流量控制
流量控制是为了控制发送方发送速率,保证接收方来得及接收
接收方发送的确认报文中的窗口字段可以用来控制发送方窗口大小,从而影响发送方的发送速率
4. 拥塞控制

慢开始与拥塞避免
快重传与快恢复
5. 粘包
发送方产生粘包
当发送的数据包过小时,TCP协议默认会启用Nagle算法,将这些较小的数据包进行合并发送。

接收方产生粘包
数据包会暂存在接收方的接收缓冲区中,当接收数据的速度大于应用层取数据的速度时,前一个数据包还没有来得及读取,下一个数据包又被放入了缓冲区,这时读取数据就会读取到粘连在一起的数据包。

解决方法
消息定长:发送端将每个数据包封装为固定长度的包,接收端每次接收缓冲区中读取固定长度的数据。
设置消息边界:服务端从网络流中按消息边界分离出消息内容,例如在包尾增加回车换行符进行分割。
将消息分为消息头和消息体,消息头中包含表示消息总长度的字段。
四、UDP
不维护连接状态,支持一对多、多对多通信
尽最大努力交付,不保证可靠传输
面向报文,不对应用程序提交的报文信息进行拆分和合并
数据包报头只有8个字节,额外开销小,吞吐量只受限于数据生成速率、传输速率及机器性能
1. UDP与TCP区别
无连接 / 面向连接
不可靠 / 可靠
无序 / 有序
速度快 / 速度慢
五、HTTP
1. 请求和响应的流程
客户端与服务器建立TCP连接
客户端发送HTTP请求
服务端接收请求并返回HTTP响应
客户端释放TCP连接
客户端浏览器解析HTML内容
2. 状态码
状态码
类型
含义
1xx
指示信息
接收的请求正在处理
2xx
成功
请求正常处理完毕
3xx
重定向
需要进行附加操作以完成请求
4xx
客户端错误
请求有语法错误或无法实现
5xx
服务器错误
服务器处理请求出错
3. 连接管理
短连接 每进行一次 HTTP 通信就要新建一个TCP连接。HTTP/1.1 之前默认是短连接,开启长连接需要在header中设置
Connection : Keep-Alive
长连接 建立一次 TCP 连接可以进行多次 HTTP 通信。HTTP/1.1 开始默认是长连接,要断开连接需要由客户端或者服务器端提出断开,使用
Connection : close
流水线 可以在同一条长连接上连续发出HTTP请求,而不用等待响应返回。HTTP/1.1 开始支持流水线。

4. GET和POST的区别
GET只能将请求信息放在URL中,POST可以将请求信息放在请求体中
GET符合幂等性和安全性,POST不符合
GET可以被缓存,POST不可以
5. Cookie和Session的区别
Cookie是由服务器发送给客户端的特殊信息,以文本的形式存放在客户端
客户端再次请求的时候,会把Cookie回发
服务器收到后,会解析Cookie生成与客户端对应的内容
Session是服务端的机制,在服务器上保存信息
解析客户端请求并操作session id,按需保存状态信息
6. 跨域
浏览器不能执行其他网站来源的脚本,这是由浏览器的同源策略造成的,同源是指协议、域名、端口均相同。
可以使用以下方法解决:
JSONP (JSON with Padding) 创建
<script>
标签,利用<script>
标签的src
属性可以获取任何域下的script
只支持GET请求,不支持POST请求CORS 在服务器增加如下响应头的一种或几种:
代理 同源策略是针对浏览器端进行的限制,可以通过服务器端来解决。 例如客户端浏览器A需要请求另一个域B,可以让服务器作为代理,去请求域B,然后将响应结果返回给客户端A。
六、HTTPS
1. HTTP和HTTPS的区别
HTTP使用明文传输,HTTPS需要到CA申请证书,使用密文传输,更加安全
HTTP默认使用80端口,HTTPS使用443端口
2. HTTPS的加密过程

七、Socket
Socket是对TCP/IP协议的抽象,是操作系统对外开放的接口,可以实现不同主机之间的进程的双向通信。

1. Socket通信流程

2. Socket编程
编写一个网络应用程序,包含客户端和服务端,用TCP和UDP两种方式实现:
客户端向服务端发送一个字符串
服务端接收到该字符串后将其输出到命令行,然后向客户端返回字符串的长度
客户端在命令行输出服务端返回的长度
TCP实现
UDP实现
八、WebSocket
WebSocket是一个可以实现客户端与服务器全双工通信的应用层协议。客户端可以主动向服务器发送信息,服务器也可以主动向客户端推送信息。客户端与服务端通过HTTP进行握手,建立连接后,双方使用TCP推送数据。

最后更新于
这有帮助吗?