网络套接字TCP/IP
OSI七层协议:
应用层
表示层
会话层
网络层
传输层
数据链路层
物理层
TCP/IP四层协议:
应用层
传输层
网络层
网络接口层
服务端流程:
1.创建套接字文件
int socket(int domain, int type, int protocol);
domain:协议域即协议族(IP协议):AF_INET - IPV4协议
Type:套接字类型: 流式 socket(SOCK_STREAM)---tcp
Protocol:传输层协议,直接给0,当protocol(协议)为0时,会自动根据套接字类型来选传输层协议
2.绑定三要素:协议族、ip地址、端口号
int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
struct sockaddr_in {// man 7 ip才能看到
sa_family_t sin_family; /* address family地址族:我们这里用的是 AF_INET */
in_port_t sin_port; /* port in network byte order 16bit端口号*/ --- htons();
struct in_addr sin_addr; /* internet address 32bitIP地址*/ inet_addr()
};
struct in_addr {
In_addr_t s_addr; //32bit IPv4地址
}
3.设置监听数
int listen(int sockfd, int backlog);
4.等待连接
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
5.接收与发送
ssize_t send(int sockfd, const void *buf, size_t len, int flags);
ssize_t recv(int sockfd, void *buf, size_t len, int flags);
6.关闭套接字文件
close(sockfd)
客户端流程:
1.创建套接字文件
2.绑定三要素:协议族、ip地址、端口号(绑定服务端的)
3.请求连接
int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
4.接收与发送
ssize_t send(int sockfd, const void *buf, size_t len, int flags);
ssize_t recv(int sockfd, void *buf, size_t len, int flags);
5.关闭套接字文件
close(fd)

本文详细介绍了网络套接字TCP/IP在OSI七层协议和TCP/IP四层协议中的位置,以及服务端和客户端的套接字操作流程,包括创建、绑定、监听、连接、发送和接收数据,最后关闭套接字。重点讲解了套接字文件的创建、三要素绑定、监听数设置以及接收与发送数据的函数使用。
495

被折叠的 条评论
为什么被折叠?



