以太网编程的理解

以太网通信,编程实现有四种方式: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协议的长连接或者轮询连接是不一样的。

资料参考引用地址

1.[https://blog.csdn.net/lkforce/article/details/79308906]

2.[https://blog.csdn.net/xfz0330/article/details/63687710]

原文地址:https://www.cnblogs.com/h2zZhou/p/10488163.html