以太网通信,编程实现有四种方式:ISAPI、CGI、WinInet、Winsock 。
其中Winsock类即socket套接字编程,无论是在windows还是Linux,都是最方便实用的不二选择。
socket概念
socket的中文名字是套接字,是支持TCP/IP协议的网络通信的基本操作单元。形象的来说就是TCP/IP网络中建立连接的两端。
socket位于应用层和传输层之间,算是一个抽象层,是对TCP/IP协议的封装并抽象出了一组接口,供应用层调用。
传输层的TCP协议和UDP协议socket都可以用,如果一个socket连接基于TCP协议,那么建立socket连接的时候也需要三次握手。
socket本身不是协议。
从设计模式的角度来说,socket属于门面模式。
就像用PID来区分系统内部的进程一样,socket可以用来区分网络上的进程。socket用以下五种信息来标识网络的进程:连接使用的协议,本机IP,本地进程的端口,远程主机IP,远程进程端口。
下面是对网络7层的简单总结~
结构名 |
功能 |
代表协议 |
主要设备 |
数据格式 |
应用层 |
确定通信对象,提供访问网络服务的接口 |
Telnet、FTP、HTTP、SNMP等 |
网关 |
数据流 |
表示层 |
负责数据的编码、转化(界面与二进制数据转换,高级语言与机器语言的转换)数据压缩、解压,加密、解密。根据不同应用目的处理为不同的格式,表现出来就是我们看到的各种各样的文件扩展名。 |
ASCLL、PICT、TIFF、JPEG、 MIDI、MPEG |
网关 |
数据流 |
会话层 |
负责建立、维护、控制会话单工(Simplex)、半双工(Half duplex)、全双工(Full duplex)三种通信模式的服务 |
RPC、SQL、NFS、X WINDOWS、ASP |
网关 |
数据流 |
传输层 |
负责分割、组合数据,实现端到端的逻辑连接三次握手(Three-way handshake),面向连接(Connection-Oriented)或非面向连接(Connectionless-Oriented)的服务,流控(Flow control)等都发生在这一层。是第一个端到端,即主机到主机的层次。 |
TCP、UDP、SPX等 |
网关 |
数据段(segment) |
网络层 |
负责管理网络地址,定位设备,决定路由 |
IP、IPX、APPLETALK、ICMP |
路由器,网桥路由器 |
数据包 |
数据链路层 |
负责准备物理传输,CRC校验,错误通知,网络拓扑,流控等 |
802.2、802.3ATM、HDLC、FRAME RELAY |
交换机、网桥、网卡 |
帧 |
物理层 |
就是实实在在的物理链路,负责将数据以比特流的方式发送、接收 |
V.35、EIA/TIA-232 |
集线器、中继器,电缆,发送器,接收器 |
比特流 |
五层结构
五层结构其实是把七层结构的应用层、表示层、会话层合在一起,统一叫做应用层。
所以我们看到的各种协议属于应用层。
协议篇
TCP协议
TransmissionControl Protocol,传输控制协议,又叫三次握手协议,建立TCP连接时需要经过三次握手,关闭TCP连接时需要四次握手。
TCP协议是传输层协议,是面向连接的协议。
UDP协议
UserDatagram Protocol,用户数据报协议,UDP是传输层协议,面向数据报,不提供可靠性,没有三次握手,不保证数据到达,没有超时重发,传输速度非常快。
IP协议
InternetProtocol,网络互连协议,规定了网络上计算机通信时的规则。
TCP/IP协议
和TCP协议不同,TCP/IP协议是一个协议族,包含了应用层,传输层,网络层的很多协议。
应用层:HTTP协议,FTP协议,SNMP协议,TELNET协议。
传输层:TCP协议,UDP协议。
网络层:IP协议,ICMP协议,ARP协议。
HTTP协议
HTTP协议是超文本传送协议(HyperText TransferProtocol)的缩写.
HTTP协议是应用层协议。
HTTP2.0
HTTP2.0使用了多路复用技术,可以在一个连接中并发处理多个请求,每个请求都有一个id。另外在HTTP1.1的基础上进行了很多优化和改进,大幅提高了性能。
HTTP2.0是向下兼容的。
WebSocket协议
WebSocket协议是应用层协议,和socket不是一回事。层级划分上来说,WebSocket协议和http协议一样都是基于TCP协议,用来传输数据的。
WebSocket协议依赖HTTP协议进行第一次握手,然后就直接从TCP通道传数据,不再需要HTTP协议。
基于WebSocket建立的连接是一种全双工的连接,连接双方没有主次关系,任何一方都可以主动向另一方发起请求,是一种真正的持久连接,这一点和HTTP协议的长连接或者轮询连接是不一样的。
资料参考引用地址