网站域名如何备案,建设厅公积金中心网站,易企秀微网站如何做文字链接,公司网站谁负责做目录
一、概念
二、TCP/IP参考模型
三、客户端和服务端使用TCP通信过程
1、同一以太网下
四、函数介绍
1、socket
#xff08;1#xff09;声明
#xff08;2#xff09;作用
#xff08;3#xff09;参数
#xff08;4#xff09;返回值
#xff08;51声明
2作用
3参数
4返回值
5通信域协议族相关宏
6套接字类型相关宏
7协议相关宏
8__domain和__type的组合 2、socketpair
1声明
2作用
3参数
4返回值 3、shutdown
1声明
2作用
3参数
4返回值
5how相关宏
五、参考书籍 一、概念
名称描述套接字用于网络通信应用与底层网络协议的一个接口。协议交换信息的两个部分之间相互理解的一组规则、约定和数据结构的集合。应用层负责处理应用的特定细节。像FTP、Telnet、E-mail等协议都属于应用层协议。传输层负责为两台机器上的应用程序提供端到端的数据通信常用协议有TCP传输控制协议和UDP用户数据报协议。网络层负责IP报文的路由选择也称为IP层最重要的功能是路由每一个IP报文包含源地址和目的地址。常用的IP协议有IPv4和IPv6。IP协议提供无连接的、不可靠的数据报传输服务只是尽可能传送每一个IP报文到指定的地址但不保证报文可靠地到达。TCP应用情况下TCP保证可靠性。UDP应用情况下可靠性由应用自己保证。网络接口层由设备驱动程序和网卡组成负责发送和接收IP数据报应用程序几乎不涉及此层。IPv4使用32位的地址是20世纪80年代以来一直使用的一种协议。IPv6使用128位的地址为了应对20世纪90年代中期网络的快速增长而设计的。TCP是面向连接的提供客户端和服务端之间的连接。此协议可以保证为用户提供可靠的、顺序的、不重复的和全双工的字节流。UDP是一种面向无连接的协议其不需要在客户端和服务端建立连接因此不保证数据报一定到达目的地和到达的顺序。路由指分组从源端到目的端时决定端到端路径的网络范围的进程。概括总结就是路由接收数据包-查看目的地址-与路由表进行匹配找到转发端口-转发到该端口。
二、TCP/IP参考模型
TCP/IP协议可以抽象成如下层次模型。套接字相当于应用程序和底层协议交互的一个接口无论我们是从网络读取、写入、配置网络协议都要通过套接字。 三、客户端和服务端使用TCP通信过程
1、同一以太网下
客户端的信息从上至下通过网络从下至上到达服务端。
客户端程序将应用数据包装成TCP数据传输给TCPTCP将自己的数据报包装成IP报文发送给IPIP再次包装传递给以太网服务端的IP接收来自网络驱动程序的信息解开IP层的包装还原回TCP信息传给TCPTCP解开其TCP包装还原为应用数据传递给服务端程序。 四、函数介绍
1、socket
1声明
int socket(int __domain, int __type, int __protocol)
2作用
在通信域__domain中创建一个类型为__type、协议为__protocol的套接字。
3参数
参数名描述__domain通信域其决定了通信时使用的网络协议族。__type套接字类型。__protocol协议从协议族中选一个具体协议。如果不清楚协议族与协议的对应关系可以使用宏IPPROTO_IP来让系统选择默认协议。
4返回值
名称描述成功返回套接字文件描述符。失败-1
5通信域协议族相关宏
名称描述AF_INET网络通信IPv4英特网协议。AF_INET6网络通信IPv6英特网协议。AF_UNIXUNIX通信域同一台计算机内两个进程通过文件系统进行通信以文件系统路径名作为套接字的地址。AF_UNSPEC未指定。
6套接字类型相关宏
名称描述SOCK_STREAM字节流套接字提供面向连接的双向、可靠、顺序和不重复的数据流数据没有边界可支持带外数据。SOCK_DGRAM数据报套接字支持双向通信但不保证数据报时顺序、可靠和不重复的。 1、进程可能从数据报套接字拿到重复的数据。 2、数据发送顺序和数据接收顺序不同。 3、数据是有边界的每次往数据报套接字写数据时数据就会形成一个包。 4、数据报套接字没有连接每次发包时需指定接收者的地址。SOCK_RAW原始套接字其可以越过高层协议直接访问底层协议IP协议或网络的物理层
7协议相关宏
名称描述IPPROTO_IPIPv4网际协议如果不清楚协议族与协议的对应关系可以使用宏IPPROTO_IP来让系统选择默认协议。IPPROTO_IPV6IPv6网际协议IPPROTO_ICMP英特网控制报文协议IPPROTO_IGMP英特网组管理协议IPPROTO_RAW原始IP数据包协议IPPROTO_TCP传输控制协议IPPROTO_UDP用户数据报协议IPPROTO_SCTP流控制传输协议
8__domain和__type的组合
__domain和__type的组合下的默认协议会给出名字support表示支持组合但无协议名。not support表示不支持。
__type\__domainAF_INETAF_INET6AF_UNIXSOCK_STREAMTCPTCPsupportSOCK_DGRAMUDPUDPsupportSOCK_RAWIPv4IPv6not support 2、socketpair
1声明
int socketpair(int domain, int type, int protocol, int socket_vector[2]);
2作用
在通信域__domain中创建两个类型为__type、协议为__protocol的套接字通常应用于父子进程间通信类型于管道两个文件描述符一个用于父进程一个用于子进程不用的一方需关闭每个套接字都是全双工的可读可写但个人感觉没有管道灵活管道适用于子进程是另外的程序映射到标准输入输出。匿名管道相关知识点可以参考之前的博客《Unix环境高级编程-学习-04-匿名管道PIPE》。
3参数
参数名描述domain通信域其决定了通信时使用的网络协议族。type套接字类型。protocol协议从协议族中选一个具体协议。如果不清楚协议族与协议的对应关系可以使用宏IPPROTO_IP来让系统选择默认协议。socket_vector两个套接字文件描述符全双工。
4返回值
名称描述成功0失败-1 3、shutdown
1声明
int shutdown(int socket, int how);
2作用
相较于close函数更灵活可以关闭套接字的部分或全部例如套接字是全双工的我们只是想从套接字读数据我们就可以关闭它的写功能。
3参数
参数名描述socket需要关闭的套接字。how如何关闭套接字。
4返回值
名称描述成功0失败-1
5how相关宏
名称描述SHUT_RD禁用进一步的接收操作。SHUT_WR禁用进一步的发送操作。SHUT_RDWR禁用进一步的发送和接收操作。
五、参考书籍
编号名称1《UNIX Linux程序设计教程》2《UNIX 环境高级编程》3《UNIX 网络编程》
这三本写的都很好建议大家有时间多阅读。