TCP/IP 简单介绍
- 应用层 (Application):应用层是个很普遍的概念,有一些基本相同的系统级 TCP/IP 应用以及应用协议,也有许多的企业商业应用和互联网应用。
- 传输层 (Transport):传输层包括 UDP 和 TCP,UDP 几乎不对报文进行检查,而 TCP 提供传输保证。
- 网络层 (Network):网络层协议由一系列协议组成,包括 ICMP、IGMP、RIP、OSPF、IP(v4,v6) 等。
- 链路层 (Link):又称为物理数据网络接口层,负责报文传输。

Socket相关概念
按端口号可分为3大类编程
(1)公认端口(WellKnownPorts):从0到1023,它们紧密绑定(binding)于一些服务。一般这些端口的通信明确代表了某种服务的协议。例如:80端口实际上老是HTTP通信。安全
(2)注册端口(RegisteredPorts):从1024到49151。它们松散地绑定于一些服务。也就是说有许多服务绑定于这些端口,这些端口一样用于许多其它目的。例如:许多系统处理动态端口从1024左右开始。服务器
(3)动态和/或私有端口(Dynamicand/orPrivatePorts):从49152到65535。理论上,不该为服务分配这些端口。实际上,机器一般从1024起分配动态端口。网络
•流式Socket(STREAM):
是一种面向链接的Socket,针对于面向链接的TCP服务应用,安全,可是效率低;
•数据报式Socket(DATAGRAM):
是一种无链接的Socket,对应于无链接的UDP服务应用.不安全(丢失,顺序混乱,在接收端要分析重排及要求重发),但效率高.
Socket的通常应用模式(服务器端和客户端)
1.服务端welcoming socket 开始监听端口(负责监听客户端链接信息)
2.客户端client socket链接服务端指定端口(负责接收和发送服务端消息)
3.服务端welcoming socket 监听到客户端链接,建立connection socket。(负责和客户端通讯)socket
服务器端的Socket(至少须要两个)
•一个负责接收客户端链接请求(但不负责与客户端通讯)
•每成功接收到一个客户端的链接便在服务端产生一个对应的负责通讯的Socket
•在接收到客户端链接时建立.
•为每一个链接成功的客户端请求在服务端都建立一个对应的Socket(负责和客户端通讯).
客户端的Socket
•客户端Socket
•必须指定要链接的服务端地址和端口。
•经过建立一个Socket对象来初始化一个到服务器端的TCP链接。
Socket的通信过程
服务器端:
•申请一个socket
•绑定到一个IP地址和一个端口上
•开启侦听,等待接授链接
客户端:
•申请一个socket
•链接服务器(指明IP地址和端口号)
服务器端接到链接请求后与客户端创建链接并进行通信,原监听socket继续监听。
Socket的构造函数:
链接经过构造函数完成。
public Socket(AddressFamily addressFamily, SocketType socketType, ProtocolType protocolType)
•AddressFamily 成员指定 Socket 用来解析地址的寻址方案。例如,InterNetwork 指示当 Socket 使用一个 IP 版本 4 地址链接。
•SocketType 定义要打开的 Socket 的类型
•Socket 类使用 ProtocolType 枚举向 Windows Sockets API 通知所请求的协议
如:mySocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
AddressFamily.InterNetWork:使用 IP4地址函数
SocketType.Stream:支持可靠、双向、基于链接的字节流,而不重复数据。此类型的 Socket 与单个对方主机进行通讯,而且在通讯开始以前须要远程主机链接。Stream 使用传输控制协议 (Tcp) ProtocolType 和 InterNetworkAddressFamily。学习
ProtocolType.Tcp:使用传输控制协议。spa
注意:3d
- 至少要定义一个要链接的远程主机的IP和端口号。
- 端口号必须在 1 和 65535之间,最好在1024之后。
- 要链接的远程主机必须正在监听指定端口,也就是说你没法随意链接远程主机。
- 如:
IPAddress addr = IPAddress.Parse("127.0.0.1");server
IPEndPoint endp = new IPEndPoint(addr, 10001);
服务端先绑定:serverWelcomeSocket.Bind(endp)
客户端再链接:clientSocket.Connect(endp)
5.一个Socket一次只能链接一台主机。
6.Socket关闭后没法再次使用。
7.每一个Socket对象只能一台远程主机链接. 若是你想链接到多台远程主机, 你必须建立多个Socket对象.
Socket的方法
- ------------------相关类--------------------------
- IPEndPoint类:包含了一对IP地址和端口号
- --------------------方法们------------------------------
- Bind(): 绑定一个本地的IP和端口号(IPEndPoint)
- Listen(): 让Socket侦听传入的链接尝试,并指定侦听队列容量
- Connect(): 初始化与另外一个Socket的链接
- Accept(): 接收链接并返回一个新的socket
Socket通讯基本流程图

基于TCP的Socket编程(TCP service:可靠的字节流传输)

结语
根据以前的学习笔记,关于Socket的基础知识就介绍到这里,以后会作一个小案例,能够更好的对socket的理解。主要是项目中须要用到网络编程方面的东西,周末没事干,就将以前socket的方面的知识点复习了一下,也为了更好更快的投入工做中.....