1. TCP/IP理解
TCP/IP协议族,即传输控制协议、网间协议,定义了主机如何连入因特网及数据如何在它们之间传输的标准。从字面意思来看TCP/IP是TCP和IP协议的合称,但实际上TCP/IP协议是指因特网整个TCP/IP协议族。不同于ISO模型的七个分层,TCP/IP协议参考模型把所有的TCP/IP系列协议归类到四个抽象层中:
应用层:TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet等等
传输层:TCP,UDP
网络层:IP,ICMP,OSPF,EIGRP,IGMP
数据链路层:SLIP,CSLIP,PPP,MTU
TCP/IP协议
ISO模型
2. socket概念
1. Socket(中文译为套接字)是操作系统内核中的一个数据结构,它几乎是所有网络通信的基础。
2. 网络通信,归根到底还是进程间的通信(不同计算机上的进程间通信, 又称为网络通信, IP协议进行的主要是端到端通信)。
在网络中,每一个节点(计算机或路由)都有一个网络地址,也就是IP地址。两个进程通信时,首先要确定各自所在的网络节点的网络地址。但是,网络地址只能确定进程所在的计算机,而一台计算机上很可能同时运行着多个进程,所以仅凭网络地址还不能确定到底是和网络中的哪一个进程进行通信,因此套接字中还需要包括其他的信息,也就是端口号(PORT)。在一台计算机中,一个端口号一次只能分配给一个进程,也就是说,在一台计算机中,端口号和进程之间是一 一对应的关系。
3. socket使用(IP地址,协议,端口号)来标识一个进程。所以,使用端口号和网络地址的组合可以唯一的确定整个网络中的一个网络进程。
端口号的范围从065535,一类是由互联网指派名字和号码公司ICANN负责分配给一些常用的应用程序固定使用的“周知的端口”,其值一般为01023, 用户自定义端口号一般大于等于1024
4. 每一个socket都用一个半相关描述{协议、本地地址、本地端口}来表示;一个完整的套接字则用一个相关描述{协议、本地地址、本地端口、远程地址、远程端口}来表示。socket也有一个类似于打开文件的函数调用,该函数返回一个整型的socket描述符,随后的连接建立、数据传输等操作都是通过socket描述符来实现的。
5. 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。socket通常也称作“套接字”,用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过“套接字”向网络发出请求或者应答网络请求。socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,对于文件用打开、读写、关闭模式来操作,socket就是该模式在网络上的一个实现,即socket是一种特殊的文件。两个程序通过“网络”交互数据就使用socket,它只负责两件事:建立连接,传递数据;同时socket在收发数据时遵循的原则:有发就有收,收发必相等!
socket创建文件读写和socket收发数据的区别:
- file模块是针对某个指定文件进行打开、读写、关闭
- socket模块是针对服务器端和客户端socket进行打开(连接)、读写(收发)、关闭(断开)
3. Socket类型
socket类型在Liunx和Python中是一样的, 只是Python中的类型都定义在socket模块中, 调用方式socket.SOCK_XXXX
-
流式socket(SOCK_STREAM)用于TCP通信
面向连接的通信提供序列化的、可靠的和不重复的数据交付,而没有记录边界。这基本上意味着每条消息可以拆分成多个片段,并且每一条消息片段都确保能够到达目的地,然后将它们按顺序组合在一起,最后将完整消息传递给正在等待的应用程序。 -
数据报socket(SOCK_DGRAM)用于UDP通信
它是一种无连接的套接字。这意味
着,在通信开始之前并不需要建立连接。此时,在数据传输过程中并无法保证它的顺序性、可靠性或重复性。然而,数据报确实保存了记录边界,这就意味着消息是以整体发送的,而并非首先分成多个片段,例如,使用面向连接的协议。 -
原始socket(SOCK_RAW)用于新的网络协议实现的测试等
原始套接字,普通的套接字无法处理ICMP、IGMP等网络报文,而SOCK_RAW可以, 其次,SOCK_RAW也可以处理特殊的IPv4报文;此外,利用原始套接字,用户可以通过IP_HDRINCL套接字选项构造IP头。
网友评论