TCP/IP
四层
第一层:网络接口层
包括用于协作IP数据在已有网络介质上传输的协议。实际上TCP/IP标准并不定义与ISO数据链路层和物理层相对应的功能。相反,它定义像地址解析协议(Address Resolution Protocol,ARP)这样的协议,提供TCP/IP协议的数据结构和实际物理硬件之间的接口。
第二层:网络层
对应于OSI七层参考模型的网络层。本层包含IP协议、RIP协议(Routing Information Protocol,路由信息协议),负责数据的包装、寻址和路由。同时还包含网间控制报文协议(Internet Control Message Protocol,ICMP)用来提供网络诊断信息。
第三层:传输层
对应于OSI七层参考模型的传输层,它提供两种端到端的通信服务。其中TCP协议(Transmission Control Protocol)提供可靠的数据流运输服务,UDP协议(Use Datagram Protocol)提供不可靠的用户数据报服务。
第四层:应用层
对应于OSI七层参考模型的应用层和表达层。因特网的应用层协议包括Finger、Whois、FTP(文件传输协议)、Gopher、HTTP(超文本传输协议)、Telent(远程终端协议)、SMTP(简单邮件传送协议)、IRC(因特网中继会话)、NNTP(网络新闻传输协议)等。
UDP属于哪一层
传输层
三次握手
TCP(传输控制协议)的三次握手是建立一个可靠的、面向连接的通信会话的过程。这个过程确保了双方都准备好开始数据传输,并且它们能够相互发送和接收数据。下面是三次握手的具体步骤:
1. 第一次握手 (SYN):
客户端向服务器发送一个带有同步序列编号(SYN)标志的数据包。这表示客户端想要与服务器建立连接。
这个数据包中还包含了客户端选择的一个初始序列号(ISN),用于后续数据传输时的字节流编号。
2. 第二次握手 (SYN-ACK):
服务器接收到客户端的SYN后,会回复一个确认(ACK)数据包,其中包含了一个值为客户端ISN+1的确认号,表明已经收到了客户端的请求。
服务器同时也会在这个数据包中设置自己的SYN标志,并选择一个自己的初始序列号。
3. 第三次握手 (ACK):
客户端收到服务器的SYN-ACK后,会再发送一个ACK数据包给服务器。这个ACK中的确认号是服务器的ISN+1,表示客户端已经准备好接收来自服务器的数据。
至此,连接建立完成,双方可以开始进行数据交换。
通过这三次握手,TCP确保了连接是双向可用的,并且每个方向上的序列号都被正确地初始化。这样可以保证后续数据传输的可靠性。如果在一定时间内服务器没有收到客户端的最终ACK,它可能会重发SYN-ACK数据包。
个人理解
1. 第一次握手 (SYN):
客户端发,服务端收
服务端知道了客户端发没问题
2. 第二次握手 (SYN-ACK):
服务端发,客户端收
客户端知道了服务端收,发没问题
3. 第三次握手 (ACK):
客户端发,服务端收
服务端知道了客户端收没问题
至此,双方都知道对方收发没问题,连接建立成功。
TCP/UDP
TCP和UDP的区别
总结:
TCP协议在传送数据段的时候要给段标号;UDP协议不要
TCP协议可靠;UDP协议不可靠
TCP协议是面向连接;UDP协议采用无连接
TCP协议负载较高,采用虚电路;UDP采用无连接
TCP协议的发送方要确认接收方是否收到数据段(3次握手协议)
TCP协议采用窗口技术和流控制
接口状态码
HTTP 接口状态码用于指示特定 HTTP 请求的处理结果。它们分为五大类,每一类包含一系列具体的状态码。以下是这些状态码的分类和一些常见的状态码:
1xx(信息响应)
100 Continue:请求已接收,客户端应继续请求。
101 Switching Protocols:服务器同意切换协议。
2xx(成功响应)
200 OK:请求成功,服务器返回所请求的数据。
201 Created:请求成功并创建了新的资源。
204 No Content:请求成功,但没有内容返回。
3xx(重定向消息)
301 Moved Permanently:请求的资源已永久移动到新位置。
302 Found:请求的资源临时移动到新位置。
304 Not Modified:资源未修改,客户端可以使用缓存的版本。
4xx(客户端错误响应)
400 Bad Request:请求语法错误,服务器无法理解。
401 Unauthorized:请求需要身份验证。
403 Forbidden:服务器拒绝请求,客户端无权访问资源。
404 Not Found:服务器找不到请求的资源。
5xx(服务器错误响应)
500 Internal Server Error:服务器内部错误,无法完成请求。
502 Bad Gateway:服务器作为网关或代理,从上游服务器收到无效响应。
503 Service Unavailable:服务器当前无法处理请求,可能是由于过载或维护。
断点续传
1. 原理
基本原理:断点续传的基本思想是在文件传输中断时记录文件已传输的部分,以便在网络连接恢复后可以从断点处继续传输剩余部分。
确定断点位置:通常会记录文件的大小和已传输的字节数,或者使用文件的哈希值来确定文件的完整性。
2. HTTP支持
HTTP支持:HTTP协议支持断点续传,特别是通过使用
Range
头部。Range
头部:Range
头部告诉服务器从哪个位置开始传输数据。例如,Range: bytes=0-1023
表示从第0个字节到第1023个字节。使用方法:客户端在发起请求时可以包含
Range
头部来指定文件的起始位置。服务器则通过返回206 Partial Content
状态码和相应的数据段来响应。
3. 实现
客户端实现:
客户端首先获取文件的大小。
客户端在文件传输中断时记录已传输的字节数。
当需要恢复传输时,客户端使用
Range
头部发送请求。客户端将接收到的数据追加到已有的文件中。
服务器端支持:
服务器需要解析
Range
头部,确定要传输的数据范围。服务器返回
206 Partial Content
状态码,并设置Content-Range
头部来指示传输的数据范围。服务器发送指定范围内的数据。
4. 错误处理
网络错误:客户端应捕获网络错误,并在适当的情况下重试传输。
文件完整性:使用校验和(如MD5或SHA-256)来验证文件的完整性。如果文件损坏,客户端可以重新请求缺失的部分。
5. 工具和库
流行工具:如wget、curl等都支持断点续传。
库:在不同的编程语言中有相应的库支持断点续传,例如Python的
requests
库或Node.js的axios
库等。
6. 性能优化
分块传输:将文件分割成多个小块进行传输,这样即使某一块传输失败,也不需要重新传输整个文件。
并发传输:可以使用多个连接同时传输文件的不同部分,以提高传输速度。
7. 安全性
文件完整性:使用校验和来验证文件的完整性。
加密:可以使用HTTPS等安全协议来加密传输数据。
权限管理:确保只有授权的用户才能访问文件。