网络编程——TCP协议socket

Posted linagcheng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网络编程——TCP协议socket相关的知识,希望对你有一定的参考价值。

TCP协议与socket套接字

一、TCP协议

1、可靠传输,TCP数据包没有长度限制,理论上可以无限长,但是为了保证网络的效率,通常TCP数据包的长度不会超过IP数据包的长度,以确保单个TCP数据包不必再分割。

2.(1)三次握手建链接
(2)四次挥手断开链接
(3)tcp协议的状态
(4)syn洪水攻击与半连接池

3、(1)三次握手建立链接、四次挥手断开链接(各种状态)

技术分享图片

(2)syn洪水攻击与半连接池

syn洪水攻击:就是让服务器资源耗尽,无法提供正常的服务,间接地拒绝

半连接池:暂时存放请求,用于限制请求个数,但是不限制连接个数

二、socket套接字

1、socket层

技术分享图片

2、什么是socket

Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。Socket是封装好TCP/IP协议的接口。

3、socket工作流程

技术分享图片

 

先从服务器端说起。服务器端先初始化Socket,然后与端口绑定(bind),对端口进行监听(listen),调用accept阻塞,等待客户端连接。在这时如果有个客户端初始化一个Socket,然后连接服务器(connect),如果连接成功,这时客户端与服务器端的连接就建立了。客户端发送数据请求,服务器端接收请求并处理请求,然后把回应数据发送给客户端,客户端读取数据,最后关闭连接,一次交互结束

技术分享图片TCP服务端
技术分享图片
from socket import socket, AF_INET, SOCK_STREAM

IP = 127.0.0.1
PORT = 8888
ADDRESS = (IP, PORT)
BUFSIZE = 1024
# 1.创建客户端socket对象
cli_socket = socket(AF_INET, SOCK_STREAM)
# 2.连接服务器
cli_socket.connect(ADDRESS)
# 3.发收数据
cli_socket.send(hello.encode(utf-8))  # 只能以字节类型发送
data = cli_socket.recv(BUFSIZE)
print(data.decode(utf-8))
# 关闭客户端连接
cli_socket.close()
TCP客户端

 




以上是关于网络编程——TCP协议socket的主要内容,如果未能解决你的问题,请参考以下文章

python的socket的tcp协议编程

网络编程 socket模块 tcp协议 udp协议

C++语言实现网络聊天程序的设计与实现(基于TCP/IP协议的SOCKET编程)超详细(代码+解析)

网络 基于TCP协议socket编程

基于TCP协议的socket编程

基于TCP协议下的socket编程