日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

tcp 三次握手,四次挥手

發布時間:2023/12/20 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 tcp 三次握手,四次挥手 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

三次握手:

在用 tcp 傳輸數據時,需要先建立連接,用三次握手建立傳輸數據的連接通道

其實是服務端端和客戶端各自都在準備資源。

  • 第一次握手:客戶端向服務器發送連接請求包,標志位 SYN (同步序號)置為 seq = X;
  • 第二次握手:服務器收到客戶端發過來的報文,由 SYN = X 知道客戶端要求建立聯機,向客戶端發送一個包含 SYN 和 ACK 的 TCP 報文,其中服務器向客戶端發送連接請求包,標志位 SYN (同步序列)置為 Y=1;將確認序號(ACK)設置為客戶的序列號加 1,即 X + 1
  • 第三次握手:客戶端收到服務器發來的包后檢查確認序號(ACK)是否正確,即第一次發送的序號加1(X+1);若正確,服務器再次打算確認序號(ACK) = Y+1;服務器收到確認序號值 ACK=2 則連接成功,可以傳送數據了。

四次揮手:

  • 第一次揮手:客戶端給服務器發送 TCP 包,用來關閉客戶端到服務器的數據傳送,將標志位 FIN 置為 X 和 ACK 置為 Y ;
  • 第二次揮手:服務器收到 FIN 后,返回一個 ACK(標志位ACK=1)確認序號為收到的序號加1,即 X+1
  • 第三次揮手:服務器關閉與客戶端的連接,發送一個 FIN,標志位 FIN和 ACK 置為1,序號為 Y
  • 第四次揮手:客戶端收到服務器發送的 FIN 之后,發回 ACK 確認,確認序號為收到的序號加1,即Y+1,服務器手機 ACK 為 Y+1 后關閉

在第二次和第三次、第三次和第四次之間會有超時等待。

""" 一個簡單的http服務器 創建http服務器, tcp """ import socket import redef service_client(client_socket):"""實現接收消息和發送消息"""# 接收客戶發送過來的請求request = client_socket.recv(1024).decode("utf-8")print(">>>" * 20)print(request)# 將客戶端的請求變成列表request_lines = request.splitlines()print(request_lines)# 使用正則取出客戶端請求的數據名稱# request_lines = ['GET /images/trolltech-logo.png HTTP/1.1', 'Host: 127.0.0.1:8888']# 從中取出 /images/trolltech-logo.pngret = re.match(r"[^/]+(/[^ ]*) HTTP/1.1", request_lines[0])client_request = ""if ret:print("客戶端請求的數據是 %s" % ret.group(1))client_request = ret.group(1)if client_request == "/":client_request = "/index.html"try:f = open("./html%s" % client_request, "rb")except:response_status_line = "HTTP/1.1 404 NOT FOUNT\r\n"space_line = "\r\n"response_header = response_status_line + space_lineresponse_body = "<h1>FILE NOT FOUND</h1>".encode("utf-8")else:html_content = f.read()f.close()# 根據客戶需求回送數據過去response_status_line = "HTTP/1.1 200 OK\r\n" # response status line 響應狀態行 HTTP 必須大寫 換行是\r\nspace_line = "\r\n" # 響應頭和響應的數據之間有個空行response_body = html_content # 發送的內容response_header = response_status_line + space_lineclient_socket.send(response_header.encode("utf-8")) # 注意:響應頭是str格式,需要編碼client_socket.send(response_body) # 響應的內容需要是字節模式,不需要進行編碼發送,瀏覽器會自動解析# 關閉這個套接字client_socket.close()def main():# 創建服務器的套接字tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) # 可以讓端口重復使用# 綁定本地信息tcp_server_socket.bind(("", 8888)) # 地址信息放在元組中# 將套接字變為監聽tcp_server_socket.listen() # 最大的客戶端鏈接數為128while True:# 等待客戶端鏈接# 如果有客戶端鏈接,會返回元組,第一個元素是一個新的套接字專為這個客戶端服務,第二個元素是客戶端地址信息new_socket, client_addr = tcp_server_socket.accept()# 循環和客戶的進行通信service_client(new_socket)# 關閉監聽套接字tcp_server_socket.close()if __name__ == '__main__':main()

總結

以上是生活随笔為你收集整理的tcp 三次握手,四次挥手的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。