tcp 三次握手,四次揮手

2021-09-27 04:45:15 字數 2411 閱讀 7700

在用 tcp 傳輸資料時,需要先建立連線,用三次握手建立傳輸資料的連線通道

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

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

乙個簡單的http伺服器

建立http伺服器, tcp

"""import socket

import re

def service_client(client_socket):

"""實現接收訊息和傳送訊息"""

# 接收客戶傳送過來的請求

request = client_socket.recv(1024).decode("utf-8")

print(">>>" * 20)

print(request)

# 將客戶端的請求變成列表

request_lines = request.splitlines()

print(request_lines)

# 使用正則取出客戶端請求的資料名稱

# 從中取出 /images/trolltech-logo.png

print("客戶端請求的資料是 %s" % ret.group(1))

# 根據客戶需求回送資料過去

response_status_line = "http/1.1 200 ok\r\n" # response status line 響應狀態行 http 必須大寫 換行是\r\n

space_line = "\r\n" # 響應頭和響應的資料之間有個空行

response_body = html_content # 傳送的內容

response_header = response_status_line + space_line

client_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() # 最大的客戶端鏈結數為128

while true:

# 等待客戶端鏈結

new_socket, client_addr = tcp_server_socket.accept()

# 迴圈和客戶的進行通訊

service_client(new_socket)

# 關閉監聽套接字

tcp_server_socket.close()

if __name__ == '__main__':

main()

TCP三次握手 四次揮手

tcp 三次握手 tcp 連線是通過三次握手進行初始化的。三次握手的目的是同步連線雙方的序列號和確認號並交換 tcp 視窗大小資訊。以下步驟概述了通常情況下客戶端計算機聯絡伺服器計算機的過程 1.客戶端向伺服器傳送乙個syn置位的tcp報文,其中包含連線的初始序列號x和乙個視窗大小 表示客戶端上用來...

TCP三次握手 四次揮手

服務端的tcp程序先建立傳輸控制塊tcb,準備接受客戶端程序的連線請求,然後服務端程序處於listen狀態,等待客戶端的連線請求,如有,則作出響應。1 客戶端的tcp程序也首先建立傳輸控制模組tcb,然後向服務端發出連線請求報文段,該報文段首部中的syn 1,ack 0,同時選擇乙個初始序號seq ...

TCP三次握手四次揮手

tcp transmission control protocol 傳輸控制協議 tcp是主機對主機層的傳輸控制協議,提供可靠的連線服務,採用三次握手確認建立乙個連線。位碼即tcp標誌位,有6種標誌 urg urgent緊急 ack acknowledgement 確認 psh push傳送 rst...