TCP/IP协议
TCP/IP 协议栈是一系列网络协议(protocol)
的总和,是构成网络通信的核心骨架,它定义了电子设备如何连入因特网,以及数据如何在它们之间进行传输。
OSI 7层模型和TCP/IP四层网络模型对应关系
计算机网路基础的知识不过多讲解,主要是让大家明白接下来的Linux网络编程数据流属于那一层,具体如下图
TCP/IP协议数据流示意图
我们接下来讲解的Linux网络编程Tcp协议是属于传输层的协议
Linux Socket 网络编程
TCP协议
TCP是面向连接的可靠的传输层协议。
TCP编程
Linux中的网络编程是通过socket接口来进行的。socket是一种特殊的I/O接口,它也是一种文件描述符。常用于不同机器上的进程之间的通信,当然也可以实现本地机器上的进程之间通信。
使用TCP协议的流程图
根据流程图逐一讲解API接口.
服务端API接口
socket
#include <sys/socket.h>
int socket(int family //协议簇 一般 AF_INET PF_INET
,int type //套接口类型 SOCK_STREAM(字节流套接口)
,int protocol); //非原始套接口,参数为 0
套接口类型:
- SOCK_STREAM(字节流套接口)
- SOCK_DGRAM(数据报套接口)
- SOCK_RAW(原始套接口)
示例:
listenfd = socket(AF_INET,SOCK_STREAM,0);
bind
为套接字分配一个本地IP和协议端口
#include <sys/socket.h>
int bind(int socket
, const struct sockaddr *address//协议族地址
,socklen_t address_len); //协议族长度
- address
: 协议族地址,通用的socket
地址
通用的socket地址不是很好用,所以Linux
为各个协议族提供了专门的socket
地址结构体
UNIX本地协议族
struct sockaddr_un {
sa_family_t sa_family;
char sun_path[100];
}
TCP/IP协议族