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协议负载较高,采用虚电路;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等安全协议来加密传输数据。

  • 权限管理:确保只有授权的用户才能访问文件。