TCP网络-手动编写SYN、SYN ACK、ACK吗?

3
如果你正在编写一个基本的Python TCP服务器和客户端,你是否需要自己添加SYN、SYN ACK和ACK响应,还是由socket模块处理?
如果需要自己编写,那么是否可以像这样简单地实现?
客户端:
#set up clientSocket

data = "SYN"
clientSocket.send(data.encode('utf-8'))
if((clientSocket.recv(1024)).decode('utf-8') == "SYN ACK") {
  data = "ACK"
  clientSocket.send(data.encode('utf-8'))
}

服务器类似地响应并检查接收是否为SYN,然后发送SYN ACK。如果不是这样实现的正确方式是什么?我没有运行上面的代码,只是对其逻辑感到好奇,不必担心语法是否完全正确。


请阅读 https://docs.python.org/2/library/socket.html 。其中有示例。 - Klaus D.
1个回答

7

SYN和ACK由操作系统处理,用户无需直接干预。用户程序不需要发送初始的SYN、SYN-ACK、ACK握手包,也不能发送。

初始的SYN是代表客户端通过socket.socket.connect()发送的。

初始的SYN-ACK是代表服务器通过socket.socket.listen()发送的。


1
小细节:SYN-ACK是由socket.listen()触发而不是socket.accept()。一旦您建立了一个监听套接字,操作系统会自动完成握手,socket.accept()仅用于获取传入的连接。 - Barmar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接