计算机网络 - Aminute/aminute GitHub Wiki
计算机网络
[TOC]
TCP三次握手和四次挥手
TCP和UDP的区别
- UDP 不建立连接,不可靠协议,限制传输64kb以内
- TCP 面向连接(3次握手),可靠协议,通过字节流传输,效率没有UDP高
TCP怎么保持可靠性
-
三次握手

三次握手的目的:信息对等和防止超时,也可以防止超时导致脏连接(A发送的第一条连接超时,重新发送,等建立连接并关闭连接之后,之前超时的连接B接受到,就会建立脏连接)
第三次连接是为了B机器确认自己有发送报文和A机器有接受报文的能力
-
四次挥手(TCP连接是双全工的,所以每个方向都必须进行单独关闭)

-
为什么TIME_WAIT状态还需要等2MSL后才能返回到CLOSED状态?
第一、确认被动关闭方能够顺利进入CLOSED状态,假想网络不可靠,如果A机器收到ACK指令之后,就立马进入到CLOSED状态,可能会导致B机器无法收到最后的ACK指令,从而无法进入CLOSED状态
2MSL是报文在网络上生存的最长时间
UDP保证可靠性
传输层无法保证数据的可靠传输,只能通过应用层来实现了。实现的方式可以参照tcp可靠性传输的方式,只是实现不在传输层,实现转移到了应用层。
实现确认机制、重传机制、窗口确认机制。
必须实现如下功能:
发送:包的分片、包确认、包的重发
接收:包的调序、包的序号确认
目前有如下开源程序利用udp实现了可靠的数据传输。分别为RUDP、RTP、UDT
-
TCP是如何保证可靠传输的
TCP是一种面向连接的,确保数据在端到端间可靠传输的协议。面向连接是指在发送数据前,需要先建立一条虚拟的链路,然后让数据在这条链路上“流动”完成传输。为了确保数据的可靠传输,不仅需要对发出的每一个字节进行编号确认,校验每一个数据包的有效性,在出现超时情况时重传,还需要通过实现滑动窗口和拥塞控制等机制,避免网络状况恶化而最终影响数据传输的极端情形。
-
为什么要进行三次握手
主要有两个目的
信息对等和防止超时信息对等:只有在第三次握手建立之后,服务器才可以确认自己有发送报文和对方有接受报文的能力
防止超时:如果只有两次握手,如果客户端请求超时,则会出现脏连接(导致服务器单方面造成连接)
-
客户端关闭连接的时候为什么要等待2MSL才能关闭
第一、确认被动 关闭方(服务器)能够顺利进入CLOSED状态。如果最后一个ACK发送完之后,发送方立马进入CLOSED状态,可能会导致B机器无法确保收到最后的ACK指令,也无法进入到最后的CLOSED状态;
第二,防止失效请求。这样做是为了防止已失效连接的请求数据包与正常连接的请求数据包混淆而发生异常;
-
拥塞控制
慢开始,拥塞避免,快重传,快恢复
http协议
cookie和session(会话控制)的区别
http状态码
200 (成功) 服务器已成功处理了请求。 通常,这表示服务器提供了请求的网页。 201 (已创建) 请求成功并且服务器创建了新的资源。 202 (已接受) 服务器已接受请求,但尚未处理。 203 (非授权信息) 服务器已成功处理了请求,但返回的信息可能来自另一来源。 204 (无内容) 服务器成功处理了请求,但没有返回任何内容。 205 (重置内容) 服务器成功处理了请求,但没有返回任何内容。
300 (多种选择) 针对请求,服务器可执行多种操作。 服务器可根据请求者 (user agent) 选择一项操作,或提供操作列表供请求者选择。 301 (永久移动) 请求的网页已永久移动到新位置。 服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。 302 (临时移动) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。 303 (查看其他位置) 请求者应当对不同的位置使用单独的 GET 请求来检索响应时,服务器返回此代码。 304 (未修改) 自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容。 305 (使用代理) 请求者只能使用代理访问请求的网页。 如果服务器返回此响应,还表示请求者应使用代理。
400 (错误请求) 服务器不理解请求的语法。 401 (未授权) 请求要求身份验证。 对于需要登录的网页,服务器可能返回此响应。 403 (禁止) 服务器拒绝请求。 404 (未找到) 服务器找不到请求的网页。 405 (方法禁用) 禁用请求中指定的方法。
500 (服务器内部错误) 服务器遇到错误,无法完成请求。 501 (尚未实施) 服务器不具备完成请求的功能。 例如,服务器无法识别请求方法时可能会返回此代码。 502 (错误网关) 服务器作为网关或代理,从上游服务器收到无效响应。 503 (服务不可用) 服务器目前无法使用(由于超载或停机维护)。 通常,这只是暂时状态。 504 (网关超时) 服务器作为网关或代理,但是没有及时从上游服务器收到请求。 505 (HTTP 版本不受支持) 服务器不支持请求中所用的 HTTP 协议版本
HTTP的GET和POST的区别
- POST浏览器看不到,但抓包可以分析参数
- GET请求在URL中传送的参数是有长度限制的,而POST没有
- GET参数通过URL传递,POST放在Request body中
- GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息
HTTP和TCP的keep alive字段
-
http1.0属于短连接,http1.1新增长连接
- 短连接:建立连接(三次握手)→数据传输→关闭连接(四次挥手)
- 长连接:建立连接(三次握手)→数据传输→保持连接→数据传输→关闭连接(四次挥手),网站默认和rpc远程调用都是长连接
- 长连接小效率高,重新访问不需要三次握手
- 长连接关闭时间:
- 配置失效心跳检测时间,客户端没有建立连接,直接关闭
- 客户端主动关闭
- Tomcat服务器可以配置长连接超时时间
-
HTTP属于应用层协议,底层使用的是TCP协议
-
报文分为请求行,请求头,请求体
-
Referer关键字
Referer 是 HTTP 请求header 的一部分,当浏览器(或者模拟浏览器行为)向web 服务器发送请求的时候,头信息里有包含 Referer 。比如我在www.google.com 里有一个www.baidu.com 链接,那么点击这个www.baidu.com ,它的header 信息里就有 Referer=http://www.google.com
https
HTTPS协议详解(端口4443) HTTP协议是80
HTTPS是一种加密传输协议,基于非对称加密算法和对称加密算法的协作使用,其中的S代表SSL(安全套接字层协议)
如下图所示,

- 客户端发起请求的时候,会传递一个随机数A给服务端
- 服务端回复请求,也发送一个随机数B给客户端,并发送证书
- 客户端审核证书,产生一个随机数C,并通过证书里面的公钥进行加密传送给服务器
- 服务器用私钥解密获取随机数C
- 此时客户端和服务器都有随机数ABC,通过这三个随机数,可以在客户端和服务器产生相同的对称密钥
- 客户端和服务器确认使用对称加密进行传输
中继器、集线器工作在物理层,交换机工作在数据链路层,路由器工作在网络层
通信数据转发程序:代理、网管、隧道
代理
作用:利用缓存技术较少网络带宽的流量,组织内部针对特定网站访问控制
分类:缓存代理、透明代理
- 缓存代理:会预先将资源的副本保存在代理服务器上,当再次收到相同的资源请求时,将缓存作为返回(会向服务器确定资源)
- 透明代理:转发请求或返回响应时,不对报文做任何加工的代理称为透明代理
网管
作用:使通信线路上的服务器提供非HTTP协议服务
例如,网管可以连接数据库,查询sql语句
隧道
作用:确保客户端和服务端进行安全的通信
TCP粘包
https://www.cnblogs.com/sui776265233/p/9289858.html
解决方式:
- 使用带消息头的协议、消息头存储消息开始标识及消息长度信息,服务端获取消息头的时候解析出消息长度,然后向后读取该长度的内容。
- 设置定长消息,服务端每次读取既定长度的内容作为一条完整消息,当消息不够长时,空位补上固定字符。
- 设置消息边界,服务端从网络流中按消息编辑分离出消息内容,一般使用‘\n’。
- 更为复杂的协议,例如楼主最近接触比较多的车联网协议808,809协议。