python-day27(三次握手,四次挥手)

一. Osi七层

二.  三次握手 四次挥手(重点)

3次握手: A约吗>>>B约啊>>>A收到

4次挥手: A分手吧>>>B让我考虑下>>>.B分吧>>>>A再见

三. Tcp和Udp的区别

  TCP(Transmission Control Protocol)可靠的、面向连接的协议(eg:打电话)、传输效率低全双工通信(发送缓存&接收缓存)、面向字节流。

    使用TCP的应用:Web浏览器;文件传输程序。

  UDP(User Datagram Protocol)不可靠的、无连接的服务,传输效率高(发送前时延小),一对一、一对多、多对一、多对多、

    面向报文(数据包),尽最大努力服务,无拥塞控制。使用UDP的应用:域名系统 (DNS);视频流;IP语音(VoIP)。

四. Tcp和Udp协议下socket撰写方式

 Tcp服务端,客户端

 1 import socket
 2 
 3 server = socket.socket()
 4 ip_port = ('192.168.15.46',8001)
 5 server.bind(ip_port)
 6 
 7 server.listen()
 8 
 9 conn,addr = server.accept()
10 
11 while 1:
12     server_msg = input('wulaoban>>')
13     server_msg = server_msg.encode('utf-8')
14     conn.send(server_msg)
15 
16     from_client_msg = conn.recv(1024) #1024是一次性最大能接收的消息长度
17     from_client_msg = from_client_msg.decode('utf-8')
18     print(from_client_msg)
19 
20 conn.close()
21 server.close()
View Code
 1 import socket
 2 
 3 client = socket.socket()
 4 
 5 server_ip_port = ('192.168.15.46',8001)
 6 
 7 client.connect(server_ip_port)
 8 
 9 while 1:
10     from_server_msg = client.recv(1024)
11     from_server_msg = from_server_msg.decode('utf-8')
12     print('来自服务端的消息',from_server_msg)
13     client_msg = input('客户端>>>>')
14     client_msg = client_msg.encode('utf-8')
15     client.send(client_msg)
View Code

Udp服务端,客户端

 1 import socket
 2 
 3 udp_server = socket.socket(type=socket.SOCK_DGRAM)  #datagram 数据包的意思
 4 ip_port = ('192.168.15.49',8001)
 5 udp_server.bind(ip_port)
 6 print(1111)
 7 from_client_msg,server_addr = udp_server.recvfrom(1024) #消息数据类型都是bytes类型,阻塞
 8 print(22222)
 9 print(from_client_msg.decode('utf-8'))
10 print(server_addr)
11 udp_server.sendto(b'hello what?',server_addr)
12 
13 
14 udp_server.close()
View Code
 1 import socket
 2 
 3 udp_client = socket.socket(type=socket.SOCK_DGRAM)
 4 server_ip_port = ('192.168.15.49',8001)
 5 
 6 udp_client.sendto(b'hello',server_ip_port) #c参数1:发送的消息,参数2往哪里发,对方的地址
 7 
 8 from_server_msg,server_addr = udp_client.recvfrom(1024)
 9 
10 print(from_server_msg.decode('utf-8'))
11 udp_client.close()
View Code

五. 缓冲区

  

SO_RCVBUF和SO_SNDBUF每个套接口都有一个发送缓冲区和一个接收缓冲区,使用这两个套接口选项可以改变缺省缓冲区大小。

// 接收缓冲区
int nRecvBuf=32*1024; //设置为32K
setsockopt(s,SOL_SOCKET,SO_RCVBUF,(const char*)&nRecvBuf,sizeof(int));
//发送缓冲区
int nSendBuf=32*1024;//设置为32K
setsockopt(s,SOL_SOCKET,SO_SNDBUF,(const char*)&nSendBuf,sizeof(int));

注意:当设置TCP套接口接收缓冲区的大小时,函数调用顺序是很重要的,因为TCP的窗口规模选项是在建立连接时用SYN与对方互换得到的。对于客 户,O_RCVBUF选项必须在connect之前设置;对于服务器,SO_RCVBUF选项必须在listen前设置。

转载于:https://www.cnblogs.com/Thui/p/10003412.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在Windows上使用Python实现TCP的三次握手四次挥手如下: 1. 三次握手三次握手是建立TCP连接的过程,主要涉及到客户端和服务器之间的三个步骤。 - 第一步:客户端向服务器发送一个SYN包(SYN=1,ACK=0),表示请求建立连接。 - 第二步:服务器收到SYN包后,向客户端发送一个SYN+ACK包(SYN=1,ACK=1),表示确认连接请求,并同时发送一个与客户端约定好的初始序列号。 - 第三步:客户端收到服务器的SYN+ACK包后,向服务器发送一个ACK包(SYN=0,ACK=1),表示确认连接建立。 2. 四次挥手四次挥手是TCP连接的关闭过程,主要涉及到客户端和服务器之间的四个步骤。 - 第一步:客户端向服务器发送一个FIN包,表示主动关闭连接。 - 第二步:服务器收到客户端的FIN包后,返回一个ACK包,确认收到FIN包。 - 第三步:当服务器准备好关闭连接时,发送一个FIN包给客户端。 - 第四步:客户端收到服务器的FIN包后,发送一个ACK包,确认收到FIN包并关闭连接。 在Python中,可以使用socket模块实现TCP的三次握手四次挥手。具体代码如下所示: ```python import socket # 三次握手 def three_way_handshake(): server_ip = '服务器IP地址' server_port = 8080 # 客户端向服务器发起连接请求 client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) client.connect((server_ip, server_port)) # 第一次握手:发送SYN包给服务器 client.send(b'SYN') # 第二次握手:接收服务器的SYN+ACK包 response = client.recv(1024) if response == b'SYN+ACK': # 第三次握手:向服务器发送ACK包确认连接建立 client.send(b'ACK') # 连接建立成功 print('TCP连接建立成功') # 关闭连接 client.close() # 四次挥手 def four_way_wave(): server_ip = '服务器IP地址' server_port = 8080 # 客户端向服务器发起连接请求 client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) client.connect((server_ip, server_port)) # 第一次挥手:发送FIN包给服务器 client.send(b'FIN') # 第二次挥手:接收服务器的ACK包 response = client.recv(1024) if response == b'ACK': # 第三次挥手:接收服务器的FIN包 response = client.recv(1024) if response == b'FIN': # 第四次挥手:向服务器发送ACK包确认关闭连接 client.send(b'ACK') # 连接关闭成功 print('TCP连接关闭成功') # 关闭连接 client.close() ``` 以上就是在Windows平台上使用Python实现TCP的三次握手四次挥手的方法。需要根据实际情况修改服务器的IP地址和端口号。 ### 回答2: 在Windows中,可以使用Python来实现TCP的三次握手四次挥手三次握手是建立TCP连接的过程。首先,客户端发送一个SYN(同步)数据包给服务器,其中包含自己的初始序列号。服务器收到后,回复一个SYN-ACK(同步-确认)数据包,其中包含自己的初始序列号和确认号(即加1)。最后,客户端向服务器发送一个ACK(确认)数据包,其中确认号为服务器发来的序列号加1。这样,TCP连接就建立了。 具体的Python代码如下: ```python import socket def handshake(): client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server_address = ('localhost', 8080) client_socket.connect(server_address) # 第一次握手:客户端发送SYN client_socket.send(b'SYN') # 第二次握手:服务器发送SYN-ACK data = client_socket.recv(1024) if data == b'SYN-ACK': # 第三次握手:客户端发送ACK client_socket.send(b'ACK') print('TCP连接已建立') client_socket.close() handshake() ``` 四次挥手是关闭TCP连接的过程。首先,客户端发送一个FIN(结束)数据包给服务器,表示不再发送数据。服务器收到FIN后,回复一个ACK确认收到,并在接下来的某个时间发送自己的FIN。客户端收到服务器的FIN后,回复一个ACK确认收到,然后等待一段时间,最后关闭连接。 具体的Python代码如下: ```python import socket def close_connection(): client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server_address = ('localhost', 8080) client_socket.connect(server_address) # 第一次挥手:客户端发送FIN client_socket.send(b'FIN') # 第二次挥手:服务器发送ACK data = client_socket.recv(1024) if data == b'ACK': # 第三次挥手:服务器发送FIN data = client_socket.recv(1024) if data == b'FIN': # 第四次挥手:客户端发送ACK client_socket.send(b'ACK') print('TCP连接已关闭') client_socket.close() close_connection() ``` 以上就是使用Python在Windows中实现TCP的三次握手四次挥手的步骤和代码。 ### 回答3: TCP是一种可靠的传输控制协议,它通过三次握手建立连接和四次挥手断开连接。在Windows系统上,可以使用Python编写代码来实现TCP的三次握手四次挥手三次握手的实现如下: 1. 创建服务器端和客户端的Socket对象。 2. 服务器端监听指定的端口,等待客户端连接。 3. 客户端发起连接请求,向服务器发送SYN包。 4. 服务器端收到SYN包后,回复一个SYN-ACK包,确认客户端的连接请求,并分配一个通信端口。 5. 客户端收到SYN-ACK包后,发送一个ACK包,确认服务器的连接确认。 6. 服务器收到ACK包后,完成三次握手,双方建立了可靠的连接。 四次挥手的实现如下: 1. 客户端发送一个FIN包,表示要断开连接。 2. 服务器收到FIN包后,发送一个ACK包,确认客户端的断开请求。 3. 服务器发送一个FIN包,表示服务器也要断开连接。 4. 客户端收到FIN包后,发送一个ACK包,确认服务器的断开请求。 5. 服务器收到ACK包后,完成四次挥手,双方断开了连接。 通过编写Python代码可以实现TCP的三次握手四次挥手操作,具体步骤如上所述。在Windows系统上,可以使用Python的socket模块来实现Socket对象的创建和数据传输。需要注意的是,在编写代码时,要遵循TCP协议的规定,确保握手和挥手的顺序和数据包的格式正确。 这样,在Windows系统上,可以使用Python来实现TCP的三次握手四次挥手,从而建立和断开网络连接。这对于实现网络通信和数据传输非常重要。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值