Computer_Network2
计算机网络
TCP
- __源端口号__(Source Port,16位)表示发送方的端口号,用于标识发送数据的应用程序。
- __目的端口号__(Destination Port,16位)表示接收方的端口号,用于标识接收数据的应用程序。
- __序列号__(Sequence Number,32位)序列号用于标识该 TCP 报文段中第一个字节在整个字节流中的相对位置。
http和https的区别:
HTTP 和 HTTPS 是两种常见的网络通信协议,它们的主要区别在于 安全性 和 数据传输方式。以下是它们的详细对比:
1. 基本概念
- HTTP(HyperText Transfer Protocol):
- 一种用于传输超文本(如网页)的应用层协议。
- 数据以明文形式传输,容易被窃听或篡改。
- 默认端口:
80
。
- HTTPS(HyperText Transfer Protocol Secure):
- 是 HTTP 的安全版本,基于 SSL/TLS 协议对数据进行加密。
- 数据传输过程中加密,防止窃听和篡改。
- 默认端口:
443
。
HTTPS 的加密机制
非对称加密,可以简单理解为服务端既有公钥又有私钥,通信前会将公钥发送给客户端,并且双方各给对方一个随机数用于生成后续的会话密钥,客户端使用公钥对随机数进行加密后传输给服务器只有服务端才能解开,双方生成预主密钥,双方使用客服端随机数、服务器随机数、预主密钥一起生成会话密钥,双方使用会话密钥进行加密通信。
步骤 1:客户端发起 HTTPS 请求
- 客户端(如浏览器)向服务器发起 HTTPS 请求(例如访问
https://example.com
)。
步骤 2:服务器返回 SSL/TLS 证书
- 服务器将其 SSL/TLS 证书 发送给客户端。
- 证书包含以下信息:
- 服务器的公钥。
- 证书的颁发机构(CA)。
- 证书的有效期。
- 服务器的域名(用于验证域名是否匹配)。
步骤 3:客户端验证证书
- 客户端检查证书的合法性:
- 证书是否由受信任的证书颁发机构(CA)签发。
- 证书是否在有效期内。
- 证书中的域名是否与访问的域名匹配。
- 如果证书验证失败,客户端会显示警告(如 “此网站不安全”)。
步骤 4:客户端生成对称密钥
- 客户端生成一个随机的 对称密钥(称为 会话密钥),用于加密实际传输的数据。
- 使用服务器的 公钥 加密该对称密钥,然后发送给服务器。
步骤 5:服务器解密对称密钥
- 服务器使用自己的 私钥 解密客户端发送的对称密钥。
步骤 6:建立加密通信
- 客户端和服务器都拥有相同的对称密钥。
- 双方使用该对称密钥加密和解密后续的通信数据。
HTTP状态码的含义?
100类状态码属于提示信息,是协议处理中的一种中间状态,实际用到的比较少。
- 100(继续):请求者应当继续提出请求。 服务器返回此代码表示已收到请求的第一部分,正在等待其余部分。
- 101(切换协议):请求者已要求服务器切换协议,服务器已确认并准备切换。
200类状态码表示服务器成功处理了客户端的请求。
- 200(成功):表示服务器响应成功,也就是服务器找到了客户端请求的内容,并且将内容返回给客户端。
- 204(已创建):请求成功并且服务器创建了新的资源。
- 206(部分内容):服务器成功处理了部分GET请求。
300类状态码表示客户端请求的资源发生了变动,需要客户端用新的 URL 重新发送请求获取资源,也就是重定向。
- 301(永久移动):代表永久性的重定向,值得注意的是,这种重定向跳转,从严格意义来讲不是服务器跳转,而是客户端跳转的。这个“跳”的动作是服务器是通过回传状态码301来下达给客户端的,让客户端完成跳转。
- 302(临时移动):代表临时跳转。例如:URL地址A可以向URL地址B上跳转,但这并不是永久性的,在经过一段时间后,URL地址A还可能向URL地址C上跳转。
- 304(未修改):服务器通过返回状态码304可以告诉客户端请求资源成功,但是这个资源不是由服务器提供返回给客户端的,而是客户端本地浏览器缓存中就有的这个资源,因为可以从缓存中获取这个资源,从而节省传输的开销。
提示
301 和 302 都会在响应头里使用字段 Location
,指明后续要跳转的 URL,浏览器会自动重定向新的 URL。
- 400类状态码表示客户端发送的报文有误,服务器无法处理。
- 400(错误请求):服务器不理解请求的语法。
- 403(禁止):代表请求的服务器资源权限不够,也就是没有权限去访问服务器的资源,或者请求的IP地址被封掉了。
- 404(未找到):代表服务器上没有该资源,或者说服务器找不到客户端请求的资源,是最常见的请求错误码。
500类状态码表示客户端请求报文正确,但是服务器处理时内部发生了错误,属于服务器端的错误码。
- 500(服务器内部错误):代表程序错误,也就是说请求的网页程序本身报错了。在服务器端的网页程序出错。由于现在的浏览器都会对状态码500做一定的处理,所以在一般情况下会返回一个定制的错误页面。
- 501(尚未实施):服务器不具备完成请求的功能。 例如,服务器无法识别请求方法时可能会返回此代码。
- 502(错误网关):通常是服务器作为网关或代理时返回的错误码,表示服务器自身工作正常,访问后端服务器发生了错误。
- 503(服务不可用):表示服务器当前很忙,暂时无法响应客户端。。
- 504(网关超时):服务器作为网关或代理,但是没有及时从上游服务器收到请求。
- 505(HTTP 版本不受支持):服务器不支持请求中所用的 HTTP 协议版本。
HTTP的GET和POST方法区别?重要
- GET一般用来从服务器上获取资源,POST一般用来更新服务器上的资源。
- GET是幂等的,即读取同一个资源总是得到相同的数据,而POST不是幂等的,因为每次请求对资源的改变并不是相同的。
- GET不会改变服务器上的资源,而POST会对服务器资源进行改变。
- GET请求的数据会附在URL之后,即将请求数据放置在HTTP报文的请求头中,以?分割URL和传输数据,参数之间以&相连;而POST请求会把提交的数据则放置在是HTTP请求报文的请求体中。
- POST的安全性要比GET的安全性高,因为GET请求提交的数据将明文出现在URL上,而且POST请求参数则被包装到请求体中,相对更安全。
- 从请求的大小看,GET请求的长度受限于浏览器或服务器对URL长度的限制,允许发送的数据量比较小,而POST请求则是没有大小限制的。
TCP的三次握手?
第一次握手
客户端请求建立连接,将首部的SYN标识位置为1,初始化序列号seq=x,发送给服务器,并进入SYN_SENT状态,等待服务器确认。
第二次握手
服务器接收到SYN后,将首部的SYN和ACK标识位置为1,回复确认ack的值为客户端发送的序列号x+1,同时自己也要初始化一个seq=y,ACK和SYN一起发送客户端,进入SYN_RECV状态。
第三次握手
客户端收到服务器的SYN和ACK包后,向服务器发送确认包ack,值为服务器的序列号y+1,并且自己的seq为x+1,此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态。
TCP的四次挥手?
第一次挥手
客户端发送释放报文,并停止发送数据,将首部的FIN标识位置为1,序列号seq=u发送给服务器,值等于前面已经传送过来的数据的最后一个字节的序号加1,此时客户端进入FIN_WAIT_1状态。即便FIN报文不携带数据,也要消耗一个序列号。
第二次挥手
服务器在收到释放报文后,发送确认报文,ACK标识位置为1,ack值为客户端发送的序列号u+1,并带上自己的序列号v,然后服务器进入CLOSE_WAIT关闭等待状态。这时服务器TCP通知高级应用进程,客户端向服务器的连接释放了,进入半关闭状态,但是服务器如果向客户端发送数据,客户端仍然可以接收,这个状态要持续一段时间,也就是CLOSE_WAIT关闭等待持续的时间。
客户端收到服务器的确认请求后,进入FIN_WAIT_2状态,等待服务器发送释放报文。
第三次挥手
服务器数据处理完毕后,向客户端发送释放连接报文,FIN标识位置为1,ack的值为客户端的序列号u+1,由于在半关闭状态,服务器很可能又发送一些数据,假定此时序列号为w,服务器进入LAST_ACK状态,等待客户端确认。
第四次挥手
客户端在收到服务器的释放连接报文后,会发送确认报文,ACK标识位置为1,ack值为服务器发送的序列号w+1,
自己的序列号是u+1,然后客户端就进入TIME_WAIT状态。此时TCP连接还没有释放,必须经过两个MSL时间(一个MSL指的是报文段最长寿命),当客户端撤销TCB,才进入CLOSED状态。
服务器只要收到客户端发送的确认请求,立即进入CLOSED状态。同时会撤销TCB,TCP连接至此结束。
OSI的7层网络模型?
分为应用层、表示层、会话层、运输层、网络层、链路层、物理层。
- 应用层(数据):确定进程之间通信的性质以及满足用户需要以及提供网络和用户应用,为应用程序提供服务,DNS,HTTP,HTTPS,DHCP,FTP,POP3(Post Office Protocol)、SMTP(Simple Mail Transfer Protocol)都是这层的协议。
- 表示层(数据):主要解决用户信息的语法表示问题,表示层提供各种用于应用层数据的编码和转换功能,确保一个系统的应用层发送的数据能被另一个系统的应用层识别,如数据转换,压缩和加密,解密。
- 会话层(数据):会话层就是负责建立、管理和终止表示层实体之间的通信会话。该层的通信由不同设备中的应用程序之间的服务请求和响应组成。 比如服务器验证用户登录就是在会话层。
- 传输层(段):实现网络不同主机上的用户进程之间的数据通信,可靠与不可靠的传输,传输层的错误检测,流量控制,拥塞控制。TCP UDP就这层。
- 网络层(包):本层通过IP寻址来建立两个节点之间的连接,为源端的运输层送来的分组,选择合适的路由和交换节点,正确无误地按照地址传送给目的端的运输层。IP就是这层。
- 数据链路层(帧):将上层数据封装成帧,用MAC地址访问媒介,并由错误检测和修正
- 物理层(比特流):设备之间比特流的传输,物理接口,电气特性(常用设备有(各种物理设备)集线器、中继器、调制解调器、网线、双绞线、同轴电缆。这些都是物理层的传输介质。)
#TCP/IP的四层网络模型?
TCP四层模型是我们实践过程中发现比较合理的分层,虽然我们实际过程中都没有按OSI分为七层,但是OSI对我们实践过程分层有着指导性的意义。