/*前言:学软件也有段时间了,慢慢的有了种一通百通的感觉,学做游戏想做个联网的,网络通信必备,在进入编程之前,简单了解下网络编程的常识和一些概念,内容不需要强记,了解了解,记录在此*/
一.什么是网络编程
1.网络编程的概念:
实现进程(线程)相互之间的通信和基本的网络应用原理性(协议)功能的程序。
2.网络编程的层次:
简单了解下就好
从底层到高层:
网络接口层-》网际层ip-》传输层(tcp或者udp)-》应用层(各种应用协议,比如http,ftp,pop3等等)。
二.网络通讯机制
1.我学习后的理解:
用一个小事例说明一个简单的通讯过程:
目的:主机A发送一段字符串给主机B,实现通讯。
过程:主机A中的程序段运行,发送一段字符串给主机A中的socket,该socket通过网络接口卡(不用在意这是个什么东西,没什么卵用)相连的介质(理解为网线),发往主机B中的socket,然后主机B中的某个程序调用主机B的socket,完成通讯。所以,处理网络通讯,就是处理Socket(套接字)的接受和发送,socket不是硬件,是通讯过程中使用的一些缓冲区和相关的数据结构。
2.为了满足不同程序对通讯质量和性能的要求,一般网络系统提供了三种不同类型的嵌套字:
1) 流式嵌套字:可靠的,面向连接的双向数据传输服务。实现了数据无差错,无重复的发送,内设流量控制,被传输的数据被看做无记录边界的字节流。当用户要求发送大量数据,或者对数据传输的可靠性要求较高的时候使用流式嵌套字。
2)数据报套接字:无连接,不可靠的双向数据传输报务。数据以独立的包形式发送,保留了记录边界,,不提高可靠性保证。数据在传输过程中可能会丢失或者重复,并且不能保证数据在接受短和发送都的顺序相同。
3)原始套接字:一般用于tcp/ip核心协议的编程,不做讨论。
三.TCP/IP协议栈
分为四类,从高到低:
1. 应用层:
应用层包含了很多我们常见的协议,比如远程登陆协议Telnet,文件传输协议FTP,超文本传输协议HTTP,域名系统(DNS),简单网络管理协议(SNMP),简单邮件传输协议(SMTP),邮局协议(POP3),即使通讯协议(QICQ)等。
网络应用开发的本质是:遵循应用层上的一种或者集中协议的规范去编写Socket通信程序的过程。
尽管提供了多种协议,在很多时候,我们需要定义自己的协议。
2. 传输层
传输层在应用层之下,完成两台主机之间的通信,其本质是两台主机上对应的应用进程之间的通信(我们知道的简单Socket程序所实现的正式这种通信),也叫端到端的通信,他屏蔽了IP层的路由选择和物理网络等细节。
在实际中,根据实际要求不同,传输层的协议分为两种:
1) TCP:可靠,但是要消耗更多的开销。
2) UDP:不能保证可靠性,但是高效。
3. 网际层、
可以将其称为最重要的一层,因为他管理的是IP,网络层的主要功能是吧源主机上的分组按照需要,发送到互联网中的目标主机,当然发送信息的源主机必须知道目标主机的地址。
源主机和目标主机可以在同一个网络中,也可以不再同一个网络中,当不再同一个网络红,可能有多条通路项链,而网际层的一个重要功能就是“路由选择”。
4. 网络接口层
最底层,负责将上层的数据(IP数据报),发送到其下的物理网络。不需要过多了解。
四.我们要做的
应用层中,并不稳定,不能把应用层作为网络应用开发的通用平台。
底层也不可以。
只有传输层和网际层有最稳定的规范,TCP/UDP/IP是互联网的核心协议,这就是我们日常说的TCP/IP协议。
很多公司对众多的协议都有很好的封装,比如.NET中大多封装在System.NET命名中。