day7-socket通信介绍
概述
Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯。
Socket起源于UNIX,在Unix一切皆文件哲学的思想下,socket是一种"打开—读/写—关闭"模式的实现,服务器和客户端各自维护一个"文件",在建立连接打开后,可以向自己文件写入内容供对方读取或者读取对方内容,通讯结束时关闭文件。socket的英文原义是“插槽”或“插座”,就像我们家里座机一样,如果没有网线的那个插口,电话是无法通信的。Socket是实现TCP,UDP协议的接口,便于使用TCP,UDP。
通信流程图
伪代码逻辑图
Socket Families(地址簇)
socket.
AF_UNIX #Unix本机进程间通信
socket.
AF_INET #IPV4
socket.
AF_INET6 #IPV6
这些常量表示地址(和协议)族,用于socket()的第一个参数。如果AF_UNIX常量没有被定义,那么这个协议是不受支持的。根据系统可能有更多的常量。
Socket Types(Socket协议类型)
socket.
SOCK_STREAM #for TCP
socket.
SOCK_DGRAM #for UDP
socket.
SOCK_RAW #原始套接字,普通的套接字无法处理ICMP、IGMP等网络报文,而SOCK_RAW可以;其次,SOCK_RAW也可以处理特殊的IPv4报文;此外,利用原始套接字,可以通过IP_HDRINCL套接字选项由用户构造IP头。
socket.
SOCK_RDM #是一种可靠的UDP形式,即保证交付数据报但不保证顺序。SOCK_RAM用来提供对原始协议的低级访问,在需要执行某些特殊操作时使用,如发送ICMP报文。SOCK_RAM通常仅限于高级用户或管理员运行的程序使用。
socket.
SOCK_SEQPACKET #废弃了
这些常量表示用于socket()的第二个参数的套接字类型。 (只有SOCK_STREAM和SOCK_DGRAM通常是有用的。)