以太网编程的理解
以太网通信,编程实现有四种方式: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协议的长连接或者轮询连接是不一样的。
资料参考引用地址
相关文章
- 深入理解并行编程-分割和同步设计(五)
- python网络编程基础(线程与进程、并行与并发、同步与异步、阻塞与非阻塞、CPU密集型与IO密集型)
- C#+EntityFramework编程方式详细之Code First 数据迁移
- 《java 语言程序设计》第1章编程练习
- 二、Android应用的界面编程(二)布局管理器
- 从执行上下文角度重新理解.NET(Core)的多线程编程[1]:基于调用链的”参数”传递
- 网络编程之快速理解为什么说UDP有时比TCP更有优势
- 网络编程之快速理解网络通信协议(下篇)
- 网络编程之快速理解网络通信协议(上篇)
- Atitit 开发效率补充哦哦那个、、 目录 1. 架构方法上选择快速开发的架构1 2. 编程方法上选择快速的编程范式和编程方法1 3. 开发方法论上需要快速的方法2 1.架构方法上选择快速
- 深入理解Android网络编程:技术详解与最佳实践
- 编程笔试(解析及代码实现):猴子吃桃。猴子第一天吃了若干个桃子,当即吃了一半,还不解馋,又多吃了一个…的C++、Java、Python、C#等语言代码实现
- Python:利用python代码编程实现将视频的avi格式转换为MP4格式
- Qt 网络编程:QNetworkAccessManager
- Python编程:使用decimal定点数计算0.1+0.2
- Python编程:通过实例理解闭包
- JAVA编程:i=i++的理解
- 《深入理解高并发编程:JDK核心技术》-冰河新书上市
- 002-Unix网络编程-五种IO模型,阻塞IO、非阻塞IO、多路复用IO、信号驱动IO以及异步IO和高性能IO设计模式:Reactor和Proactor
- LabVIEW编程LabVIEW开发 麻省理工MIT
- [深入理解SSD 为SSD编程] 简介和目录
- 编程是否需要从小就开始学习
- 【java】理解Java8里面CompletableFuture异步编程
- 【Java并发编程系列】全方位理解多线程几乎包含线程的所有操作哦
- python零基础学编程:Python是什么?为什么Python这么火,学Python能干什么?
- 编程:理解算法理论上的计算复杂度
- java编程入门 常见问题0002:如何将你的ecpilse工程在同学的eclipse上恢复