锐英源软件
第一信赖

精通

英语

开源

擅长

开发

培训

胸怀四海 

第一信赖

当前位置:锐英源 / 视频下载 / 锐英源软件开发培训免费讲座:SOCKET网络通信开发从入门到深入免费系列,最好的SOCKET视频和最好的SOCKET网络编程入门指导
视频简介
SOCKET(套接字)是网络通信编程的基础,掌握了它才能设计和编写出大型通信软件,比如:即时通信服务器、大型游戏服务器、大型监控服务器、网络电视流媒体服务器、DNS服务器、DHCP服务器、银行后台服务器、P2P下载服务器、远程医疗服务器和远程教学服务器等等。
锐英源有18年开发经验,11年教学和英译经验。在网络通信方面从事过大量项目,上面列举的大型通信软件锐英源大部分都实现过。
学习内容主要部分有:socket基础、原理、模式、项目实例和和项目实践的学习,讲解中融合锐英源的工作经验,学员学习后保证能解决socket通信方面的工作和招聘问题,彻底掌握SOCKET的方方面面,使学员能够熟练编制各类通信服务器软件和客户端软件。
学习SOCKET网络编程,搜寻SOCKET编程实例,想SOCKET入门,渴求SOCKET视频和SOCKET教程,请关注锐英源,国内最好的SOCKET软件开发源泉。
服务方向
软件开发技术服务
软件开发培训
计算机英语翻译
联系方式
固话:0371-63888850
手机:138-0381-0136
Q Q:396806883
微信:ryysoft
SOCKET网络通信开发入门到深入系列大纲和下载
1 Networking and Sockets网络和Sockets

3.15.1 网络分层

  • 网络应用程序使服务器和客户端能够通信。这些程序要么在远程主机上要么在本机上。
  • 为了实现和硬件无关的网络应用程序,提出了分层这个概念,也提出了路由和具体协议。这不是一个通用的规则,因为,有时应用程序可能在底层工作或者需要某些技术。
  • 这样,网络被视为一序列的堆叠层。这个堆叠可以按数字区分,但是一个有一个简要的描述:
    • 应用层:比如ftp
    • 传输层:数据封装,错误检查,协议,等等。著名的是TCP(传输控制协议)和UDP(用户报协议)
    • 网络层:描述数据怎样在网络间传送,包含路由信息等等。最著名的是IPV4或IPV6。
    • 数据链路层:硬件部分。设备类型(Ehternet,Token Ring等等)和实际的设备驱动。
  • 注意这些层次间有可能结合,比如TCP/IP或者UDP/IP。
  • 通过创建和连接socket,网络应用程序可以发送和接收信息,至于具体的物理位置不受限制。
  • 这些程序从socket里发送数据,接收数据。然而,底层提供数据是按照桢的形式实现的,桢里有数据,也有头部和尾部,这些头部和尾部包含有控制信息。
  • 当应用程序写数据到socket时,传输层创建一个桢,写入控制信息。接着,传输层把控制交给网络层,网络层添加更多的信息,决定要处理哪个桢;如果要发送某个桢,网络层把桢交给数据链路层和设备驱动。
  • 当数据链路层接收到一桢后,它检查是不是发向某个计算机的,如果是,则处理,接着向上提交给网络层,网络层再提交给传输层,最终传输层去掉桢内多余的信息,把数据提交给应用程序。
  • 在桢在网络层之间传递时,通过传递指向桢内封装数据缓冲或负荷的指针,核心避免了重复地拷贝,如果有必要,同时修改头部或尾部。

3.15.2 什么是套接字Socket?

  • socket是为了进程间通信(IPC)服务的基本构造块(这里不讨论SystemV形式的IPC方法,比如信号,共享内存和消息队列)。
  • 通信的进程可能是相关的(以父/子形式,同伴形式),或者是完全无关的。他们可能在同一个机器上,或者在局域网或互联网上的网络节点上。很多Unix功能(比如ftp,finger,telnet或lpr)使用了sockets。
  • 通过socket进行通信通常是双向且能多路复用;也就是说,数据能追加到socket里,也能从socket里读出,且在2端里不止一个进程能够存取socket(至少原理上是这样)。
  • 当一个socket创建时,它会关联上一个所谓的通信域,或者是协议簇。比如,Unix域socket,使用命名管道(fifo’s)且绑定到文件系统节点上。他们只用于在本机的通信。Internet的sockets是在IPV4或IPV6通信域上,没有关联的文件入口,且绑定(命名)到一个指定的互联网地址上(或地址系列)
  • 每个通信域有它自己指定地址的方法,要么是本机文件系统节点,要么是网络地址。
  • 通信的类型描述了数据应该怎样封装上且怎样从socket里发送的;它和协议簇无关,尽管某些域和类型的组合经常出现,且别的组合不可能出现。
  • 2个基本的类型有流socket(用SOCK_STREAM指定),数据报socket(用SOCK_DGRAM指定)。这2个也被理解为:连接和无连接。
  • 最后,每类socket和一个协议关联。比如,IP域的socket常常使用传输控制(TCP)协议。TCP协议和IP协议在出处上是关联的。IP协议管理路由,TCP控制数据完整性。
  • 通过man 7 socket和man 7 unix获取更多帮助。

3.15.3 流socket

  • 流socket是面向连接的。2个socket在数据收发通信前要互相接通,连接必须建立。
  • 流式套接字最常用的类型是SOCK_STREAM。
  • 另外Linux支持类型SOCK_SEQPACKET,它和SOCK_STREAM类型,除了数据包在数据读取时是固定长度,只有请求的数据被返回出来,多余的丢弃。
  • 流式套接字是可靠的:数据完整性被检查过,如果有异常则丢弃。没有成功发送或确认的包会重传直到成功接收。
  • 通过流socket发送的数据是经过排序的;虽然包经常不同的时间到达对端,且到达时顺序不对,操作系统内核也会基于到达情况重新排序。
  • 通信是全双工的。两端都可以自由地发送和接收,只要权限许可。
  • 面向连接的socket可能在同一机器上,也有可能在不同机器上。这会修改通信域,但是不修改类型。

3.15.4数据报socket

  • 数据报socket是无连接的。在数据传输前,2端不需要连接上。
  • 最常用的数据报socket是SOCK_DGRAM。
  • 另外Linux支持SOCK_RDM(可靠发送消息),这和数据报socket类似,只是保证了数据包的到达。
  • 数据报socket是不可靠的:数据完整性不检查,如果因为网络阻塞或中断导致丢包,也不会重传。这需要接收的应用程序来维护它自己的流控制。
  • 通过数据报socket发送的数据是不排序的;如果数据包用不同的时间到达目的且乱序接收,操作系统内核不会基于到达情况重新排序。需要应用程序来排序。
  • 通信是全双工的。两端都可以自由地发送和接收,只要权限许可。
  • 无连接的socket可能在同一机器上,也有可能在不同机器上。这会修改通信域,但是不修改类型。

3.15.5 Raw socket

  • Raw socket允许用户定制实现IPV4协议。TCP/IP协议栈被忽略,socket发送和接收原始的数据报(除了链接层的数据报头,这个是为了Ethernet服务的)
  • 只有超级用户才能访问raw socket。
  • 虽然很多类unix操作系统用raw socket的实现,缺乏标准化很难移植。
  • raw socket用于网络工具,比如traceroute和ping,互联网安全和过滤工具。在开发新的协议时也有用。

3.15.6 字节顺序

  • 当多字节值通过网络传输时,所有的通信节点必须遵守协定,让各个字节(在网络世界里常称作多字节(octets))按协定来排列。
  • 网络顺序里,大值字节在开始地址处。这也叫做Big-endian,在很多架构系统里自然会使用上,比如Sun平台。
  • 在Little-endian顺序下,小值字节在开始地址处。x86平台使用这种情况。
  • 示例,2个字节的整数700(0x02BC)。假定占用内存地址为1000-1001,对比如下:

顺序

*1000

*1001

Little Endian

BC

02

Big Endian

02

BC

  • 字节顺序错误经常会发生,要关注。
  • 当在本地地址结构体存储多字节值时,也要做字节顺序转换;虽然它应该让它对应用程序在使用内核网络层时透明化,但是实际不是如此,在Posix标准里,有几个成员要以网络顺序来维护。
  • 下面的函数实现了字节顺序转换

#include <netinet/in.h>
uint32_t htonl(uint32_t hostlong);
uint16_t htons(uint16_t hostshort);
unit32_t ntohl(uint32_t netlong);
unit16_t ntohs(unit16_t netshort);
注意:类型决定了位长度。在Linux下,这些长度处理以快速嵌入汇编指令完成。

  • 在Big-endian架构机器下,这些操作没有实际效果。
  
友情链接
版权所有 Copyright(c)2004-2021 锐英源软件
公司注册号:410105000449586 豫ICP备08007559号 最佳分辨率 1024*768
地址:郑州市金水区郑州大学北校区院(文化路97号院)内