博客
关于我
C# Stocket
阅读量:416 次
发布时间:2019-03-06

本文共 4919 字,大约阅读时间需要 16 分钟。

TCP/IP协议族的概述与端口分类

TCP/IP协议族是互联网的基础协议集,包含多个协议层,分别负责不同的网络通信任务。本文将从协议层结构、网络层协议以及端口分类三个方面进行详细介绍。

协议层结构

TCP/IP协议族分为四个主要协议层:

  • 传输层(Transport Layer):

    传输层包括TCP和UDP两个协议。TCP提供可靠的数据传输服务,常用于要求可靠连接的应用场景,而UDP则提供无连接的数据传输服务,适用于实时性要求高但可靠性要求低的场景。

  • 网络层(Network Layer):

    网络层负责数据包在网络中从一个设备到另一个设备的传输。常见的网络层协议包括ICMP、IGMP、RIP、OSPF等。IP协议(IPv4和IPv6)是网络层的核心协议,负责数据包的路由和转发。

  • 链路层(Link Layer):

    链路层也称为数据链路层,负责数据帧的传输和接收。常见的链路层协议包括以太网(Ethernet)、Wi-Fi等。

  • 应用层(Application Layer):

    应用层是协议的最高层,负责数据的应用程序接口。例如,HTTP、FTP、SMTP等协议都属于应用层。

  • 网络4层协议

    TCP/IP协议族的四个主要协议层分别是:

  • 传输层(Transport Layer):

    包括TCP和UDP协议,负责数据的传输和可靠性。

  • 网络层(Network Layer):

    包括IP协议,负责数据包的路由和转发。

  • 链路层(Link Layer):

    包括数据链路层协议,负责数据帧的传输。

  • 应用层(Application Layer):

    包括各种应用协议,如HTTP、FTP等。

  • 端口的分类

    网络中使用端口号来区分不同的应用程序和协议。端口号从0到65535,按分类可以分为以下几种:

  • 公认端口(Well Known Ports):

    端口号从0到1023,用于特定服务和协议。例如,80端口用于HTTP协议,443端口用于HTTPS协议。

  • 注册端口(Registered Ports):

    端口号从1024到49151,用于动态分配给不同的应用程序和协议。

  • 动态和私有端口(Dynamic and/or Private Ports):

    端口号从49152到65535,通常用于临时使用和私有通信。

  • 服务端界面

    以下是一个简单的C#实现的TCP/IP服务器端代码示例:

    using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.Net.Sockets;using System.Net;using System.Threading;namespace socket网络编程{    public partial class frmServer : Form    {        private List
    ClientProxSocket = new List
    (); public frmServer() { InitializeComponent(); Control.CheckForIllegalCrossThreadCalls = false; } private void BtnStart_Click(object sender, EventArgs e) { try { Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); this.txtLog.Text = "创建服务端Socket对象\r\n" + this.txtLog.Text; IPAddress ip = IPAddress.Parse(txtIp.Text.Trim()); int port = Convert.ToInt32(txtPort.Text.Trim()); IPEndPoint ipEndpoint = new IPEndPoint(ip, port); serverSocket.Bind(ipEndpoint); serverSocket.Listen(10); this.txtLog.Text = "开启接受客户端连接\r\n" + this.txtLog.Text; ThreadPool.QueueUserWorkItem(new WaitCallback(StartAcceptClient), serverSocket); } catch (Exception ex) { throw ex; } } private void StartAcceptClient(object state) { try { var serverSocket = (Socket)state; while (true) { Socket proxSocket = serverSocket.Accept(); this.txtLog.Text = string.Format("客户端:{0}已连接\r\n{1}", proxSocket.RemoteEndPoint.ToString(), this.txtLog.Text); ClientProxSocket.Add(proxSocket); ThreadPool.QueueUserWorkItem(new WaitCallback(RecieveData), proxSocket); } } catch (Exception ex) { throw ex; } } private void RecieveData(object obj) { try { var proxSocket = (Socket)obj; byte[] data = new byte[1024 * 1024]; while (true) { try { int reallen = proxSocket.Receive(data, 0, data.Length, SocketFlags.None); if (reallen == 0) { this.txtLog.Text = string.Format("客户端:{0}退出\r\n{1}", proxSocket.RemoteEndPoint.ToString(), this.txtLog.Text); proxSocket.Shutdown(SocketShutdown.Both); proxSocket.Close(); ClientProxSocket.Remove(proxSocket); return; } string formClientMsg = Encoding.UTF8.GetString(data, 0, reallen); this.txtLog.Text = string.Format("接受客户端{0}的消息:{1}\r\n{2}", proxSocket.RemoteEndPoint.ToString(), formClientMsg, this.txtLog.Text); } catch (Exception ex) { throw ex; } } } catch (Exception ex) { throw ex; } } private void BtnSend_Click(object sender, EventArgs e) { try { foreach (var socket in ClientProxSocket) { if (socket.Connected) { string str = this.txtMsg.Text.Trim(); byte[] data = Encoding.UTF8.GetBytes(str); socket.Send(data, 0, data.Length, SocketFlags.None); } } } catch (Exception ex) { throw ex; } } }}

    以上代码实现了一个简单的TCP/IP服务器端,能够接收客户端连接并处理数据传输。

    转载地址:http://fwmkz.baihongyu.com/

    你可能感兴趣的文章
    Openlayers实战:绘制图形,导出KML文件
    查看>>
    Openlayers实战:绘制多边形,导出CSV文件
    查看>>
    Openlayers实战:绘制带箭头的线
    查看>>
    Openlayers实战:自定义放大缩小,显示zoom等级
    查看>>
    Openlayers实战:自定义版权属性信息
    查看>>
    Openlayers实战:输入WKT数据,输出GML、Polyline、GeoJSON格式数据
    查看>>
    Openlayers实战:选择feature,列表滑动,定位到相应的列表位置
    查看>>
    Openlayers实战:非4326,3857的投影
    查看>>
    Openlayers高级交互(1/20): 控制功能综合展示(版权、坐标显示、放缩、比例尺、测量等)
    查看>>
    Openlayers高级交互(10/20):绘制矩形,截取对应部分的地图并保存
    查看>>
    Openlayers高级交互(11/20):显示带箭头的线段轨迹,箭头居中
    查看>>
    Openlayers高级交互(12/20):利用高德逆地理编码,点击位置,显示坐标和地址
    查看>>
    Openlayers高级交互(13/20):选择左右两部分的地图内容,横向卷帘
    查看>>
    Openlayers高级交互(14/20):汽车移动轨迹动画(开始、暂停、结束)
    查看>>
    Openlayers高级交互(15/20):显示海量多边形,10ms加载完成
    查看>>
    Openlayers高级交互(16/20):两个多边形的交集、差集、并集处理
    查看>>
    Openlayers高级交互(17/20):通过坐标显示多边形,计算出最大幅宽
    查看>>
    Openlayers高级交互(18/20):根据feature,将图形适配到最可视化窗口
    查看>>
    Openlayers高级交互(19/20): 地图上点击某处,列表中显示对应位置
    查看>>
    Openlayers高级交互(2/20):清除所有图层的有效方法
    查看>>