TCP链接

本文详细介绍了TCP的三次握手建立连接的过程和四次挥手断开连接的步骤,包括客户端和服务端的状态转换。在三次握手中,客户端通过SYN包发起连接请求,服务端确认并发送SYN+ACK,客户端再次确认完成连接。而在四次挥手中,客户端发送FIN包请求关闭,服务端确认并关闭,最后客户端再次确认并等待时间后进入CLOSED状态。
摘要由CSDN通过智能技术生成
三次握手

客户端向服务端发送SYN包,将SYN位置为1,序列号seq随机一个数为x,进入SYN_SEND状态

服务端收到SYN包,需要确认SYN包,将确认号为x+1(seq+1),同时自己也要发送一个SYN包给客户端,序列号seq随机一个数为y,(即SYN和ACK包),进入SYN_RECV状态

客户端收到SYN和ACK包,确认SYN包,将确认号为y+1(seq+1),序列号(seq = x + 1),发送ACK包给服务端,此时,客户端和服务端都进入ESTA_LISHED状态
image-20210405235357141.png

image.png

ACK:确认号是否有效

客户端和服务端,两端都可以发送关闭TCP链接的请求

过程,这里以客户端发送关闭为过程

  • 客户端请求关闭连接,客户端向服务端发送FIN包,将FIN位置为1,序列号seq随机一个数为x(seq = x),进入FIN_WAIT_1状态,这表示客户端没有数据要发送给服务端了
  • 服务器确认收到FIN包,并发送ACK包给客户端 ,ACK位置为1,确认号为(ack=x+1),序列号(seq = y),进入CLOSE_WAIT状态,客户端进入FIN_WAIT_2状态,服务器同意关闭请求
  • 等所有数据报送完毕,服务器再发送FIN和ACK包给客户端 FIN位置为1,ACK位置为1,确认号为(ack = y+1),序列号(seq = z),服务端进入LACK_ACK状态,服务器请求关闭连接
  • 然后客户端确认收到FIN和ACK包,发送ACK包给服务端,ACK位置为1,确认号(ack = z+1),序列号(seq = x+1),TIME_WAIT状态,2msl后,进入CLOSED状态

image.png

参考文章

TCP的三次握手与四次挥手理解及面试题(很全面)

细说浏览器输入URL后发生了什么

HTTP(超文本传输协议)本身基于TCP(传输控制协议),因为TCP提供了一种可靠的、面向连接的服务,这正是HTTP需要的基础。虽然通常我们不会直接“用TCP链接HTTP”,因为浏览器或其他HTTP客户端会自动处理这个过程,但在某些高级网络编程场景或自定义服务器实现中,可能会涉及到手动建立TCP连接然后发送HTTP请求。 以下是简单的步骤: 1. **创建TCP套接字**:首先,你需要在服务器端创建一个TCP监听套接字,例如在Python中可以使用`socket`库: ```python import socket server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) ``` 2. **绑定并监听**:将套接字绑定到特定的IP地址和端口,并开始监听连接请求: ```python server_socket.bind(('localhost', 8080)) # 假设我们要监听本地的8080端口 server_socket.listen(1) # 等待一个连接 ``` 3. **接受连接**:当有客户端尝试连接时,通过`accept()`函数接收连接请求: ```python client_connection, client_address = server_socket.accept() ``` 4. **发送HTTP请求**:接下来,你可以创建一个包含HTTP请求头和数据的字符串,然后将其写入到客户端套接字中。注意,你可能还需要额外处理分包和头部解析的问题,因为HTTP协议不是简单地将整个消息发送一次: ```python request = "GET /path HTTP/1.1\r\nHost: www.example.com\r\nConnection: close\r\n\r\n" # 这里只是一个示例,实际请求更复杂 client_connection.sendall(request.encode()) ``` 5. **处理响应**:服务器读取客户端的响应,然后关闭连接,完成这次TCPHTTP的交互。 请注意,这种做法并不常见,因为现代HTTP客户端如浏览器已经内置了所有必要的协议细节。在实际应用中,人们通常使用专门的HTTP服务器库(如Node.js的http模块、Java的HttpURLConnection等)来处理HTTP请求,它们会在内部处理TCP连接和协议细节。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值