浅谈TCP/IP的服务端和客户端的工作原理

Pamela ·
更新时间:2024-09-20
· 761 次阅读

**

浅谈TCP/IP的服务端和客户端的工作原理

**TCP/IP协议集和OSI层

TCP通信流程图

本人作为一个初学者,在这里只谈谈自己的一点点小理解。

服务端

第一
套接字的创建,其实有了解过udp的人应该知道这两者在一些方面还是差不多的,你需要创建一个socket()对象 并且这是客户端和服务端都需要的第一步。
第二
服务端需要去绑定本机IP和端口(bind())
第三
listen监听模式,等待接收用户的链接,使得套接字变成被动状态
第四
accept处理用户链接 你需要去创建一个新的套接字来服务客户端
并且你会得到客户端的IP和端口
example代码 tcp_server_client,client_addressinfo=tcp_server.accept()
第五
通过新创建的套接字进行数据的收发工作
tcp_rec= tcp_server_client.recv(1024)
tcp_server_client.send(response.encode())
关注这两行代码的send和recv就可以了
第六
销毁套接字,注意 销毁的是在新创建的socket()

客户端

第一
同样是一个套接字的创建
第二
使用connect链接服务端
第三
收发数据
第四
销毁套接字
看起来这两个交互是挺简单的,其中还是比较复杂的。比如说:
三次握手
在这里插入图片描述
三次握手简单的讲,就是客户端和服务端相互确认对方身份信息。
第一握手:客户端会发送一个SYN位码(tcp标志码)给服务端,服务端接收到客户端的SYN位码,会向客户端发出一个SYN位码和一个ACK位码。客户端接收到之后再发送一次ACK位码。至此三次发送位码之后 双方确认身份,就可以开始资源的交互。
位码即tcp标志位,有6种标示:
SYN(synchronous建立联机)
ACK(acknowledgement 确认)
PSH(push传送)
FIN(finish结束)
RST(reset重置)
URG(urgent紧急)
Sequence number(顺序号码) Acknowledge number(确认号码)
四次挥手

四次挥手 我的理解是 就是对资源交换的检查,检查资源是否交换彻底
客户端首先对服务端发送FIN位码和ACK位码,请求关闭,服务端接收到之后
状态变成close_wait并向客户端发送一个ACK位码,等待资源交互结束后发送一个FIN位码,客户端接送到之后最后发送一次ACK位码确认关闭。

import socket #todo 创建套接字 tcp_server = socket.socket() #todo 绑定端口 tcp_server.bind(('',8080)) #todo 监听 tcp_server.listen() #todo 等待同意 tcp_server_client,client_addressinfo=tcp_server.accept() print(tcp_server_client) print(client_addressinfo) #todo 收发资源 # tcp_rec= tcp_server_client.recv(1024) tcp_rec_data=tcp_rec.decode(); data_list=tcp_rec_data.split('\r\n') first_line =data_list[0] first_line_list=first_line.split(' ') path = first_line_list[1] print('请求路径是:',path) # todo 根据请求的路径发送正确的资源给客户端 if path == '/index': returndata = 'this is a index' elif path == '/pic': returndata = 'this is a pic' #todo 按照正确的格式拼接响应报文 response_first_line = 'HTTP/1.1 200 OK \r\n' responseheader = response_first_line + '\r\n' response = responseheader + returndata print(response) #todo 将数据发送给客户端 tcp_server_client.send(response.encode()) #todo 销毁 tcp_server_client.close()

这里是一个我自己写的服务端的代码。我用网页测试了一下。发现用127.0.0.1和用localhost会输出不一样的答案,前者会顺利运行,后者则会输出 response is not defind 如果有大佬看到 麻烦帮忙解答一下。


作者:qq_43518274



客户端 服务端 ip 工作原理 TCP/IP

需要 登录 后方可回复, 如果你还没有账号请 注册新账号
相关文章