TCP/IP协议实际上就是在物理网上的一组完整的网络协议。其中TCP是提供传输 层服务,而IP则是提供网络层服务。TCP/IP协议包括如下协议,其结构如图所示。
Socket是进程通讯的一种方式,即调用这个网络库的一些API函数实现分布在不同主机的相关进程之间的数据交换。
socket编程是网络常用的编程,我们通过在网络中创建socket关键字来实现网络间的通信,通过收集大量的资料,通过这一章节,充分的了解socket编程,文章用引用了大量大神的分析,加上自己的理解,做个总结性的文章
Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯。
int WSAStartup( WORD wVersionRequested, LPWSADATA lpWSAData);
Python 提供了两个级别访问的网络服务,低级别的网络服务支持基本的 Socket,提供了标准的BSD Sockets API,可以访问底层操作系统Socket接口的全部方法;高级别的网络服务模块 SocketServer, 提供了服务器中心类,可以简化网络服务器的开发。 socket不支持多并发,socketserver是对socket的再封装,简化网络服务器版的开发。
1 套接字是一种具有通讯端点概念的计算机网络数据结构,网络化的应用程序在开始任何通讯之前都必须要建立套接字。
网络编程主要的工作就是在发送端将信息通过指定的协议进行组装包,在接收端按照规定好的协议对包进行解析并提取出对应的信息,最终达到通信的目的。传输协议主要有 TCP 和 UDP,TCP 需要建立连接,是可靠的、基于字节流的协议,通常与 IP 协议共同使用;UDP 不需要建立连接,可靠性差,但速度更快。
在互联网通信中,计算机之间的通信需要依赖互联网通信协议,常见的网络通信协议有TCP/IP协议、IPX/SPX协议、NetBEUI协议等。TCP/IP就是其中一个网络通信协议,而我们今天要利用的socket就是依赖TCP/IP完成通信的。
__fd 指定地址与哪个套接字绑定,这是一个由之前的socket函数调用返回的套接字。调用bind的函数之后,该套接字与一个相应的地址关联,发送到这个地址的数据可以通过这个套接字来读取与使用
IP地址:用来在网络中标记一台电脑,比如 192.168.1.1 ,在本地局域网上是唯一的。
socket编程原理 socket编程原理 1 问题的引入 UNIX系统的I/O命令集,是从Maltics和早期系统中的命令演变出来的,其模式为打开一读/写一关闭(open-write-read-close)。在一个用户进程进行I/O操作时,它首先调用“打开”获得对指定文件或设备的使用权,并返回称为文件描述符的整型数,以描述用户在打开的文件或设备上进行I/O操作的进程。然后这个用户进程多次调用“读/写”以传输数据。当所有的传输操作完成后,用户进程关闭调用,通知操作系统已经完成了对某对象的使用。
ip地址的分类 常用地址分类如下所示, E类地址: 224.0.0.1~239.255.255.254, F类地址: 240.0..0.1~239.255.255.254. 因为使用较少因此不做单独介绍
closesocket(一般不会立即关闭而经历TIME_WAIT的过程)后想继续重用该socket
UDP使用数据报套接字(Datagram Socket)进行通信,因为数据报有长度,所以传输的消息有记录边界。
即使Boost.Asio可以异步处理任何类型的数据,它也主要用于网络编程。 这是因为Boost.Asio在添加了其他I / O对象之前很早就支持网络功能。 网络功能非常适合异步操作,因为通过网络传输数据可能会花费很长时间,这意味着确认和错误可能无法像发送或接收数据的功能可以执行的速度那样快。
有时候我们要控制套接字的行为(如修改缓冲区的大小),这个时候我们就要控制套接字的选项了. 以下资料均从网上收集得到 getsockopt 和 setsockopt 获得套接口选项:
常用函数:https://www.runoob.com/python/python-socket.html
UNIX系统的I/O命令集,是从Maltics和早期系统中的命令演变出来的,其模式为打开一读/写一关闭(open-write-read-close)。在一个用户进程进行I/O操作时,它首先调用“打开”获得对指定文件或设备的使用权,并返回称为文件描述符的整型数,以描述用户在打开的文件或设备上进行I/O操作的进程。然后这个用户进程多次调用“读/写”以传输数据。当所有的传输操作完成后,用户进程关闭调用,通知操作系统已经完成了对某对象的使用。
TCP/IP(Transmission Control Protocol/Internet Protocol)即传输控制协议/网间协议,是一个工业标准的协议集,它是为广域网(WANs)设计的。
由于TCP需要两个用户之间建立连接才可以发送消息所以如果像UDP那样直接开启两个线程一个发送一个接受的话,用户一就会因为发送端开启但是连接不到接收端而无法发送。 所以就要在发送端加一个条件,当socket连接上接收端都才能进行下面的操作。
一 简介 socket是两个应用程序进行通信的管道,这两个应用程序可以在同一台机器上,也可以位于两台不同的机器上,相同的网络或者不同网络之间的。Python socket有丰富的类和方法,可以简化socket编程。 二 socket 2.1 socket类型
Unix域协议并不是一个实际的协议族,它只是在同一台主机上进行客户-服务器通信时,使用与在不同主机上的客户和服务器间通信时相同的API(套接口或XTI)的一种方法。 当客户和服务器在同一台主机上时,Unix域协议是IPC通信方式的一种替代品。 Unix域提供了两种类型的套接口:字节流套接口(与TCP类似)和数据报套接口(与UDP类似)。
使用Python进行网络编程时,实际上是在Python程序中本身这个进程内,连接到指定服务器进程的通信端口进行通信,所以网络通信也可以看成两个进程间的通信。
socket() 函数是进行网络编程的基础,它用于创建一个新的套接字(socket)。套接字是网络通信的端点,可以用于在不同计算机之间传输数据。下面是对 socket() 函数的详细解释:
套接字格式:socket(family, type[,protocal]) 使用给定的套接族,套接字类型,协议编号(默认为0)来创建套接字
结构体struct linger如下: struct linger{ int lonoff; int llinger; }; 有以下三种设置情况:
TCP/IP 模型 📷 TCP/IP 三次握手 <服务器与客户端建立连接> 第一次握手:建立连接时,客户端向服务器发送第一个SYN包,并进入SYN_SENT状态,等待服务器确认 第二次握手:当服务器收到客户端的请求后,此时要给客户端一个确认信号ACK,同时发送SYN包,此时服务器进入SYN_RECV状态 第三次握手:客户端收到服务器的发的ACK+SYN包,向服务器发送ACK,发送完毕之后,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手 TCP/IP 四次挥手 <服务器与客户端断
计算机网络实现了多台计算机间的互联,使得它们彼此之间能够进行数据交流。网络应用程序就是在已连接的不同计算机上运行的程序,这些程序借助于网络协议,相互之间可以交换数据。
本文介绍了网络的一些基础概念,主要包括:IP和端口号、TCP/UDP协议、网络字节流以及套接字接口。
第二个是 SocketServer, 它提供了服务器中心类,可以简化网络服务器的开发。
至于数据在网络中是怎么走的,咱先不说,那个太底层了,咱今天见就说如何将数据从咱的屏幕上放到网络流中去。 这可不是键盘敲敲,回车一按的事情,在这背后,那也是百转千回。
最常用的软件服务器是 Web 服务器。一台机器里放一些网页或 Web 应用程序,然后启动 服务。这样的服务器的任务就是接受客户的请求,把网页发给客户(如用户计算机上的浏览器),然 后等待下一个客户请求。这些服务启动后的目标就是“永远运行下去”。虽然它们不可能实现这样的 目标,但只要没有关机或硬件出错等外力干扰,它们就能运行非常长的一段时间。
导读 导致“Connection reset”的原因是服务器端因为某种原因关闭了Connection,而客户端依然在读写数据,此时服务器会返回复位标志“RST”,然后此时客户端就会提示“java.net.SocketException: Connection reset”。可能有同学对复位标志“RST”还不太了解,这里简单解释一下:
在学习 TCP/IP 协议之前,一直对网络编程很陌生,懂得原理之后再看网络编程的代码就觉得十分熟悉,借这个机会来总结记录一下,socket 编程的一般流程如下图,我们应该要将这些流程都记熟,用的时候按照顺序写代码就行了。很多语言都提供了 socket 的库可以直接调用,这次就用 python 来写写吧。
- socket为接口通道,内部封装了IP地址、端口、协议等信息;我们可以看作是以前的通过电话机拨号上网的年代,socket即为电话线
说了网络通信,大家肯定都不会陌生,比如各种分布式系统、大数据框架等等都要涉及到网络通信,由于大多数通信都是基于TCP协议来的,因此本文就以TCP为例,结合socket api来分析Linux下的网络通信流程。
其中family参数指明协议族,type参数指明套接字类型,proctocol参数为协议类型或者0
下载地址:https://visualstudio.microsoft.com/zh-hans/downloads/
本来打算再写一篇这个系列的文章也要和小伙伴或者童鞋们说再见了,可是有人留言问WebSocket包和小程序的包不会抓,那就关于这两个知识点宏哥就再水两篇文章。
网络上的两个程序通过一个双向的通信连接实现的数据交换,这个连接的一端称为socket,socket通常也叫做"套接字",用来描述ip地址和端口,是一个通信连的句柄,可以实现不同虚拟机和计算机之间的通信。一般在Internet上的主机运行了多个软件服务,同时提供多种服务,每一种服务都打开一个socket,并且绑定到一个端口上,不同的端口对应不同的服务。
socketserver,它提供了服务器中心类,可简化网络服务器的开发,内部使用IO多路复用以及“多线程”和“多进程”,从而实现并发处理多个客户端请求的socket服务端。即,每个客服端请求连接到服务器时,socket服务端都会在服务器上创建一个“线程”或“进程”专门负责处理当前客户端的所有请求。
参考自《VC++深入详解》 这是我在看书时记录下来的东西。 注:下面的Socket其实都应该是socket 第14章网络编程 Socket是连接应用程序与网络驱动程序的桥梁,Socket在应用程序中创建,通过绑定与驱动程序建立关系。 此后,应用程序给Socket的数据,由Socket交给驱动程序向网络上发送出去。 计算机从网络上收到与该Socket绑定的IP地址和端口号相关的数据后,由驱动程序交给Socket,应用程序便可从该Socket中提取接收到的数据。 14.1 计算机网络基本知识。 1,最简单
每台主机都有自己的IP地址,所以当数据从一台主机传输到另一台主机就需要IP地址。报头中就会包含源IP和目的IP
领取专属 10元无门槛券
手把手带您无忧上云