TCP
一、TCP特点
面向连接的协议,在传输数据前需要建立一条可靠连接
流式协议,TCP将数据看作字节流。传输过程中数据是可以被分割为多个数据包在接收端重新组装的。
TCP通过校验和\序列号和确认应答来确保数据的可靠传输,出错回重新传输。
服务器被动连接,客户端主动连接。
二、TCP编程
server端
1.创建套接字socket()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| #include <sys/types.h> #include <sys/socket.h> int socket(int domain, int type, int protocol); 功能: 创建一个套接字,返回一个文件描述符 参数: domain:通信域,协议族 AF_UNIX 本地通信 AF_INET ipv4网络协议 AF_INET6 ipv6网络协议 AF_PACKET 底层接口 type:套接字的类型 SOCK_STREAM 流式套接字(tcp) SOCK_DGRAM 数据报套接字(udp) SOCK_RAW 原始套接字(用于链路层) protocol:附加协议,如果不需要,则设置为0 返回值: 成功:文件描述符 失败:‐1
|
2.绑定套接字bind()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| #include <sys/types.h> #include <sys/socket.h> int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen); 功能: 将套接字与网络信息结构体绑定 参数: sockfd:文件描述符,socket的返回值 addr:网络信息结构体 通用结构体(一般不用) struct sockaddr 网络信息结构体 sockaddr_in #include <netinet/in.h> struct sockaddr_in addrlen: addr的长度 返回值: 成功:0 失败:-1
|
3.监听套接字listen()
1 2 3 4 5 6 7 8 9 10 11
| #include <sys/types.h> #include <sys/socket.h> int listen(int sockfd, int backlog); 功能: 将套接字设置为被动监听状态,这样做之后就可以接收到连接请求 参数: sockfd:文件描述符,socket函数返回值 backlog:允许通信连接的主机个数,一般设置为5、10 返回值: 成功:0 失败:-1
|
4.接收连接accept()
1 2 3 4 5 6 7 8 9 10 11 12
| #include <sys/types.h> #include <sys/socket.h> int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen); 功能: 阻塞等待客户端的连接请求 参数: sockfd:文件描述符,socket函数的返回值 addr:接收到的客户端的信息结构体(自动填充,定义变量即可) addrlen:addr的长度 返回值: 成功:新的文件描述符(只要有客户端连接,就会产生新的文件描述符,这个新的文件描述符专门与指定的客户端进行通信的) 失败:-1
|
5.通信recv()/send()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| #include <sys/types.h> #include <sys/socket.h> ssize_t recv(int sockfd, void *buf, size_t len, int flags); 功能: 接收数据 参数: sockfd:文件描述符 客户端:socket函数的返回值 服务器:accept函数的返回值 buf:保存接收到的数据 len:buf的长度 flags:标志位 0 阻塞 MSG_DONTWAIT 非阻塞 返回值: 成功:接收的字节数 失败:-1 如果发送端关闭文件描述符或者关闭进程,则recv函数会返回0
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| #include <sys/types.h> #include <sys/socket.h> ssize_t send(int sockfd, const void *buf, size_t len, int flags); 功能: 发送数据 参数: sockfd:文件描述符 客户端: socket函数的返回值 服务器: accept函数的返回值 buf:发送的数据 len:buf的长度 flags:标志位 0 阻塞 MSG_DONTWAIT 非阻塞 返回值: 成功:发送的字节数 失败:-1
|
6.关闭套接字()
client端
1.socket()
2.connect()
1 2 3 4 5 6 7 8 9 10 11 12
| #include <sys/types.h> #include <sys/socket.h> int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen); 功能: 给服务器发送客户端的连接请求 参数: sockfd:文件描述符,socket函数的返回值 addr:要连接的服务器的网络信息结构体(需要自己设置) addrlen:add的长度 返回值: 成功:0 失败:-1
|
3.send()/recv()
4.close()
三、OSI模型
应用层 |
HTTP、SMTP、SNMP、FTP、Telnet、SIP、SSH、NFS、RTSP、XMPP、Whois、ENRP、等等 |
表示层 |
XDR、ASN.1、SMB、AFP、NCP、等等 |
会话层 |
ASAP、SSH、RPC、NetBIOS、ASP、Winsock、BSD Sockets、等等 |
传输层 |
TCP、UDP、TLS、RTP、SCTP、SPX、ATP、IL、等等 |
网络层 |
IP、ICMP、IGMP、IPX、BGP、OSPF、RIP、IGRP、EIGRP、ARP、RARP、X.25、等等 |
数据链路层 |
以太网、令牌环、HDLC、帧中继、ISDN、ATM、IEEE 802.11、FDDI、PPP、等等 |
物理层 |
例如铜缆、网线、光缆、无线电等等 |

DTLS
1.1DTLS特点作用
DTLS: 是一种面向无连接的协议,基于 UDP,作用为给UDP提供端到端的安全通道,就像SSL/TLS对TCP的作用一样。
SSL/TLS协议是基于TCP socket,利用加密、基于数字证书的身份验证等机制在传输层和应用层之间构建了一个端到端的安全通道,保证了传输数据的加密性。
没用到,用到再来补充