导航:首页 > 网络连接 > 计算机网络套接字编程详解

计算机网络套接字编程详解

发布时间:2023-12-22 00:50:48

Ⅰ 套接字是什么

套接字(socket)是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开、读写和关闭等操作。套接字允许应用程序将I/O插入到网络中,并与网络中的其他应用程序进行通信。网络套接字是IP地址与端口的组合。

总之,套接字Socket=(IP地址:端口号),套接字的表示方法是点分十进制的IP地址后面写上端口号,中间用冒号或逗号隔开。每一个传输层连接唯一地被通信两端的两个端点(即两个套接字)所确定。

(1)计算机网络套接字编程详解扩展阅读

Socket最初是加利福尼亚大学Berkeley分校为Unix系统开发的网络通信接口。后来随着TCP/IP网络的发展,Socket成为最为通用的应用程序接口,也是在Internet上进行应用开发最为通用的API。

Windows系统流行起来之后,由Microsoft联合了其他几家公司在Berkeley Sockets的基础之上进行了扩充,共同制定了一套Windows下的网络编程接口,即Windows Sockets规范。

Windows Sockets规范是一套开放的、支持多种协议的Windows下的网络编程接口,包括1.1版和2.0版两个版本。

参考资料来源:网络-套接字

Ⅱ 在windows下用C语言如何实现socket网络编程,需要用到哪些头文件或者库

需要用到的头文件包含:

#include <winsock2.h>

#include <windows.h>

与Linux环境下socket编程相比,windows环境多了一个步骤:启动或者初始化winsock库

Winsock,一种标准API,一种网络编程接口,用于两个或多个应用程序(或进程)之间通过网络进行数据通信。具有两个版本:

Winsock 1:

Windows CE平台支持。

头文件:WinSock.h

库:wsock32.lib

Winsock 2:

部分平台如Windows CE貌似不支持。通过前缀WSA可以区别于Winsock 1版本。个别函数如WSAStartup、WSACleanup、WSARecvEx、WSAGetLastError都属于Winsock 1.1规范的函数;

头文件:WinSock2.h

库:ws2_32.lib

mswsock.h用于编程扩展,使用时必须链接mswsock.dll

(2)计算机网络套接字编程详解扩展阅读

winsock库的加载与卸载:

加载:int WSAStartup(WORD wVersionRequested, LPWSADATA lpWSAData);

加载成功,返回值为0。

WORD wVersionRequested:加载的winsock版本,使用宏MAKEWORD(x, y),x表示高字节,y表示低字节。然而使用时MAKEWORD(2, 2)。高字节与低字节相同~~

LPWSADATA lpWSAData:WSADATA结构的指针,传入参数后,系统帮助我们填充版本信息。有兴趣的可以看看结构体内容,不过基本用不着。

卸载:int WSACleanup(void);比起加载,卸载的函数真是轻松愉快。

Ⅲ 进程间通信(IPC)——Unix域套接字 VS 网络套接字

进程间通信就是不同进程间进行数据交换的过程。因为进程间相互独立,每个进程拥有独立的地址空间、数据处理逻辑,操作系统保证了进程独立运行的地址安全;但在复杂系统,单进程往往不能胜任业务需求,需要多进程的加入,多进程协作完成工作,这就离不开进程间通信这个话题了。

进程间通信有很多种方式,列举如下:

而进程间通信按进程分布情况可以 单机内的进程间通信 多机间远程调用的进程间通信 ,后者无需多讲,在分布式等大型系统中是非常常见的,而进行通信的方式主要是上述方法中的网络IPC,有非常多的资料介绍相关内容,不在本文的讨论范围之内。

本文主要讨论在 单机内进程间通信 中,Unix域套接字和TCP网络套接字的对比,后者属于网络IPC。

套接字是一种应用程序接口,包括了一个用C语言写成的应用程序开发库,主要用于实现进程间通讯,在计算机网络通讯方面被广泛使用。下面要讨论的网络套接字和Unix套接字均属于套接字。

在定义套接字类型的时候,网络套接字通常使用 AF_INET 进行定义;Unix域套接字则使用 AF_UNIX 进行定义。

套接字类型有三种,分别是流式套接字、数据报套接字和原始套接字。

流式套接字(SOCK_STREAM):流式套接字用于提供面向连接、可靠的数据传输服务。该服务将保证数据能够实现无差错、无重复发送,并按顺序接收。流式套接字之所以能够实现可靠的数据服务,原因在于其使用了传输控制协议,即TCP(The Transmission Control Protocol)协议。

数据报套接字(SOCK_DGRAM):数据报套接字提供了一种无连接的服务。该服务并不能保证数据传输的可靠性,数据有可能在传输过程中丢失或出现数据重复,且无法保证顺序地接收到数据。数据报套接字使用UDP(User Datagram Protocol)协议进行数据的传输。由于数据报套接字不能保证数据传输的可靠性,对于有可能出现的数据丢失情况,需要在程序中做相应的处理。

原始套接字(SOCK_RAW):原始套接字(SOCKET_RAW)允许对较低层次的协议直接访问,比如IP、 ICMP协议,它常用于检验新的协议实现,或者访问现有服务中配置的新设备,因为RAW SOCKET可以自如地控制Windows下的多种协议,能够对网络底层的传输机制进行控制,所以可以应用原始套接字来操纵网络层和传输层应用。比如,我们可以通过RAW SOCKET来接收发向本机的ICMP、IGMP协议包,或者接收TCP/IP栈不能够处理的IP包,也可以用来发送一些自定包头或自定协议的IP包。网络监听技术很大程度上依赖于SOCKET_RAW。

原始套接字与标准套接字(标准套接字指的是前面介绍的流式套接字和数据报套接字)的区别在于:原始套接字可以读写内核没有处理的IP数据包,而流式套接字只能读取TCP协议的数据,数据报套接字只能读取UDP协议的数据。因此,如果要访问其他协议发送数据必须使用原始套接字。

网络通信中通常都是使用网络套接字进行通信,可用于单机进程间通信和多机进程间通信,网络套接字由五元组来标识:(源地址、源端口、目标地址、目标端口、通信协议),因而网络套接字在网络协议栈中属于传输层之上的内容。所以,在使用网络套接字通信的时候,传递内容需要经过完整的网络协议栈四层模型中的(传输层-网络层-网络访问层(数据链路层-物理层))。

回想在协议栈当中,对于报文的处理有哪些操作。

Unix域套接字只能用于在同一个计算机的进程间进行通信。虽然网络套接字也可以用于单机进程间的通信,但是使用Unix域套接字效率会更高,因为Unix域套接字仅仅进行数据复制,不会执行在网络协议栈中需要处理的添加、删除报文头、计算校验和、计算报文顺序等复杂操作,因而在单机的进程间通信中,更加推荐使用Unix域套接字。

关于套接字的使用,资料很多,不再介绍。

这里拿网络套接字和Unix域套接字出来比较的原因是,很多人在进行单机多进程开发时没有注意到Unix域套接字的存在,而是使用了成本较高的网络套接字进行开发。Unix套接字在通信开销方面是很小的,因而在单机通信中更加推荐使用Unix域套接字。

原文链接

网络连接详解

用户: 需求发起者。

数据传输过程图:

应用程序: 发起数据的传输交流过程。

过程:

过程:

过程:

过程:

过程:

过程:

过程:

注: OSI参考模型总结 - 小白的博客 - CSDN博客

访问服务器的过程可以通过 windows+R 快捷命令 --> 进入运行界面--->然后通过cmd 命令 --->进入控制台--->然后输入命令 tracert + 访问的域名网址-->查看访问过程。

ping命令来测试网络连接:

物理层常见故障:

硬件连接问题:1.接触不良2.硬件未连通

数据链路层故障:

1.MAC地址冲突不能上网;

2.交换机与计算机网卡的带宽协商不一致,网速不一致导致网络不通;

3.ADSL欠费导致网络不通;

4.将计算机错误的连接到VLAN(Virtual Local Area Network)。

注:

网络层故障:

1.计算机IP地址设置错误。

2.计算机没有设置网关。

3.计算机子网掩码配置错误。

4.沿途路由器路由表错误。

传输层故障:

表示层故障:

乱码问题(字符集对应错误)

应用层故障:

应用层程序配置问题(浏览器服务器的配置问题导致上网故障等)

物理层安全:

防止非法计算机接入公司网络(包括无线AP)

数据链路层安全:

1.设置WiFi密码,属于网络链路层添加秘钥的方法。

2.公司内部的交换机可以设置哪个Mac地址可以接入,设置接多少台计算机。

3.家里的ASDL拨号上网的需要登入账号密码。

4.划分不同的VLAN(Virtual Local Area Network)

网络层安全:

1.在路由器上设置ACL控制数据包转发,控制网络。

2.在计算机上设置网络安全,设置访问权限。

应用层安全:

发现软件漏洞,增补丁。

TCP用主机的IP地址加上主机上的端口号作为TCP连接的端点,这种端点就叫做套接字(socket)或插口。套接字可以实现将多个客户连接到一个服务器。

它是网络通信中端点的抽象表示,包含进行网络通信必需的五种信息:1.连接使用的协议,2.本地主机的IP地址,3.本地进程的协议端口,4.远地主机的IP地址,5.远地进程的协议端口。

1.域: 套接字通信中使用的网络介质,常见的有AF_INET(因特网络)

2.类型:

a. 流式套接字(sock_stream): 用于提供面向连接、有序的、可靠的双向jie节流的链接式数据传输服务,由类型sock_stream指定,他是在AF_INET域中通过TCP/IP链接实现的。

b. 数据报套接字(sock_dgram): 提供了一种无连接的服务,是AF_INET域中通过UDP/IP链接实现的。

c. 原始套接字(sock_raw): 允许对较低层次的协议直接访问,比如IP、ICMP协议,他常用于检验新的协议的实现或者访问现有服务中配置的新设备。网络监听技术很大程度上依赖于socket_raw.

3.协议: 套接字协议一般采用默认值。即默认参数为0。

1.套接字是用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过"套接字"向网络发出请求或者应答网络请求。

2.当前应用进程需要使用网络进行通信时,就会发出系统调用,请求操作系统为其创建“套接字”,以便把网络通信所需要的系统资源分配给该应用进程。

3.操作系统为这些资源的总和,用一个叫做套接字描述符的号码表示,并把此号码返回给应用进程,应用进程所进行的网络操作都必须使用这个号码。

4.通信完毕后,应用进程通过一个关闭套接字的系统调用通知操作系统回收与该“号码”相关的所有资源。

1.连接创建阶段

a.套接字被创建后,其端口号和IP地址都是空的,应用进程调用bind(绑定)来指明套接字的本地地址(在服务器端调用bind时就是把熟知端口号和本地IP填写到已创建的套接字中)

b.服务器调用bind后 ,还必须调用listen(收听)把套接字设置为被动方式,以便随时接收客户的服务请求。(UDP服务器由于只提供了无限连接服务,不使用listen系统调用)

c.客户进程发送连接请求后,服务器紧接着调用accept(接受),以把客户进程发来的连接请求提取出来。(系统调用accept的一个变量就是要指明哪一个套接字发起的连接。)

2.数据传输阶段

客户和服务器都在TCP连接上使用send系统调用传送数据,使用recv系统调用接收数据。

3.连接释放阶段

一旦客户或者服务器结束使用套接字,就把套接字撤销,此时调用close释放连接和撤销套接字。应用层总结-系统调用和应用编程接口 - 十分残念的博客 - CSDN博客

其过程示意图如下:

网络编程的目的:

直接或间接地通过网络协议与其他计算机进行通讯。

网络编程的问题:

1.如何准确的定位网络上一台或多态主机。

2.找到主机后,如何快速高效的传输数据。

网络编程的对象:

传输层提供的面向应用的可靠或非可靠的数据传输机制。

网络编程流行模型:

1.CS模型(客户端/服务器模型)

2.BS模型(浏览器/服务器模型)

参考网络编程--Socket(套接字) - A-祥子 - 博客园

注: 扩展链接内关于TCP/IP的相关知识讲解也相当详细,可以参考浏览一下。

阅读全文

与计算机网络套接字编程详解相关的资料

热点内容
苹果6移动只有2g网络 浏览:172
为什么探探无法连接网络 浏览:693
商业贸易计算机网络 浏览:689
手机没有网络信号怎么导航 浏览:530
输入网络安全密码是否有办法取消 浏览:166
海康威视红外网络摄像机怎么安装 浏览:933
2020年国家网络安全宣传周竞赛 浏览:759
ad铺铜设置不同网络不同距离 浏览:475
为什么每次打开抖音都是网络差 浏览:554
csgo本地网络设置 浏览:97
网络不稳定一直断网是什么原因 浏览:192
一加手机连上wifi没有网络 浏览:350
高层对讲联网是连的移动网络吗 浏览:593
目前都有哪些网络教学平台 浏览:991
网络安全知识手抄报外加字简单版 浏览:728
四级网络的四个格子是什么 浏览:489
为什么网络游戏这么贵 浏览:356
构建网络营销平台 浏览:657
网络满格为什么手机网很差 浏览:533
网络机房需要的电压是多少 浏览:780

友情链接