Socket 编程
实际上是在进行应用层的编程
应用编程接口API:
通过API完成进程之间通信

(图)

(图)
- 套接字 Socket
- WINSOCK
- TLI
Socket API
对外:IP地址确定主机地址,端口号确定进程,合起来叫做端点地址,客户机端点地址+服务器端点地址组成套接字,TCP通过套接字完成连接和通信
对内:套接字描述符
(图)
WinSock环境下 Socket函数
特有函数由WSA开头
无WSA开头的函数往往在其他系统下也可以使用。
1.WSAStartup 和 WSACleanup
这是由于TCP是一种面向连接的传输层协议,在使用协议之前必须建立TCP连接,传输完数据后必须释放连接。
/* 第一个参数代表调用版本,第二个参数返回实际版本信息*/ int WSAStartup (WORD wVersionRequested, LPWSADATA IpWSAData); ... /*完成对Socket库的调用后调用 *解除与Socket库的绑定 *释放Socket库所占用的系统资源 */ int WSACleanup (void);
2.Socket
传入参数创建套接字,创建成功会返回套接字描述符
/*第一个参数表明面向哪种协议,protofamily = PF_INET *第二个参数请求返回套接字类型,type = SOCK_STREAM, SOCK_DGRAM , SOCK_RAW *第三个参数为协议号,0为默认 */ sd = socket(protofamily, type, proto);
(图)
3.Closesocket / Close
Windows / Linux 上为不同名称
int closesocket(SOCKET sd);
返回值为 0 则成功
4. bind
如果套接字在创建的时候,还没绑定地址信息,可以通过该函数绑定本地端点信息。(通常服务端不需要)
5.connect
TCP协议下连接远程服务器 ,仅限客户端
6.listen
置服务器端TCP套接子为监听模式。并设置队列大小。(仅用于服务端TCP套接字)
7.accept
接收/提取一共连接请求,创建新套接字,通过新套接字套接.(仅用于服务端TCP套接字)
8.recv
接收数据(用于TCP套接字或连接模式的客户端)
解析服务器IP地址
(图)
通信流程
TCP客户端
- 确定服务器IP地址与端口号
- 创建套接字,(初始化一共结构体,填入表示初始状态的控制信息)
- 分配本地端点地址 (系统自动完成)
- 连接服务器(套接字,双方交换控制信息)
- 遵循应用层协议通信
- 关闭/释放连接
适用:浏览器、邮件等应用程序收发数据
UDP客户端
- 确定服务器IP地址与端口号
- 创建套接字
- 分配本地端点地址 (系统自动完成)
- 指定服务器端点地址,构造UDP数据报
- 遵循应用层协议通信
- 关闭/释放连接
适用:DSN查询、时间查询等收发较短控制数据,或者是流媒体、远程会议、Internet电话等对时延敏感型的任务。
UDP存在的必要性
- 可以区分主机进程
- 无需建立连接,省去建立连接时间,适合事务性应用
- 不做可靠性检测工作,适合对实时性要求比较高而对正确性要求不高的应用
- 没有拥塞控制和流量控制,应用能够按照设定速度发送数据。
安全性
1.TCP和UDP都没有加密,明文通过互联网传输
2.SSL为TCP提供加密连接
SSL在应用层,应用采用SSL库
SSL socket API 应用通过API将铭文给socket,SSL加密后传输
Https 跑在 SSL + TCP 上
posted on 2022-04-04 16:41 MIXTAPE_208 阅读(56) 评论(0) 收藏 举报
浙公网安备 33010602011771号