那么,这个地址到底是什么,为什么会被用作DNS服务器地址呢?本文将详细解释这个问题。什么是DNS?首先,我们需要了解一下什么是DNS。...DNS是“域名系统”(Domain Name System)的缩写,它是互联网中的一个系统,用于将域名转换为IP地址。因为人们更容易记住域名而不是IP地址,所以DNS系统的作用非常重要。...图片在浏览器中输入一个域名时,浏览器会向DNS服务器发送一个请求,以获取该域名对应的IP地址。DNS服务器会将这个请求转发给其他DNS服务器,直到找到能够提供该域名对应IP地址的DNS服务器。...在配置网络连接或者路由器时,我们需要设置一个DNS服务器地址,以便于我们的设备可以通过该DNS服务器获取域名对应的IP地址。那么,为什么会有人使用8.8.8.8这个地址呢?...事实上,8.8.8.8是由Google提供的一个公共DNS服务器地址。Google将这个DNS服务器地址开放给了全球用户,并保证了其可用性和可靠性。
(4)公网与私网地址 随着IP地址的早期规划带来的问题,早期已经有大量的A类地址被分配出去,A类地址就占用了整个IP地址中的二分之一,又无法收回,导致只有B与C类可以分配,虽然有了VLSM以及CIDR技术的方案...之前提到过IP地址在互联网中是有唯一标识的,这个指的是公网地址,私网地址的作用是什么呢?...(可上互联网的地址)来完成对internet的访问(这个技术后续会详细讲解,这里简单提一下) (5)公网地址管理机构 私网IP地址都是由对应场景的IT人员进行规划分配,而公网地址需要保证唯一性,就有一个专门的管理组织...,一个监控网,一个服务器网,办公网需要100个终端,监控网500个终端,服务器网10个终端,客户希望每个网独立一个网段,那我们在实际中去规划这个网段的时候应该怎么去规划呢?...,所以通常的做法是只需要100个地址的给予一个标准C类,需要400~500的给予一个23位或者22位网段,而10台服务器的网段,也可以给予一个标准的C。
此时我们需要区分两种套接字,一种套接字正如accept的参数sockfd,它是监听套接字,在调用listen函数之后,一个套接字会从主动连接的套接字变身为一个监听套接字;而accept返回是一个连接套接字...参数sockfd 参数sockfd就是上面解释中的监听套接字,这个套接字用来监听一个端口,当有一个客户与服务器连接时,它使用这个一个端口号,而此时这个端口号正与这个套接字关联。...这时我执行了只关闭监听端口的语句,结果却发现监听端口和已建立的连接仍然存在。我都已经关闭了监听套接字,为什么客户端还可以继续往监听端口发信息?这到底是因为什么呢?新套接字和监听套接字有什么关系呢?...参数sockfd 参数sockfd就是上面解释中的监听套接字,这个套接字用来监听一个端口,当有一个客户与服务器连接时,它使用这个一个端口号,而此时这个端口号正与这个套接字关联。...这时我执行了只关闭监听端口的语句,结果却发现监听端口和已建立的连接仍然存在。我都已经关闭了监听套接字,为什么客户端还可以继续往监听端口发信息?这到底是因为什么呢?新套接字和监听套接字有什么关系呢?
# 前序 UDP(用户数据报协议)没有连接的,是面向数据报的,是不可靠 # 套接字就是IP地址+端口号 IP地址:4字节 端口号:2字节,也就是说范围是0~65536 端口号分为 知名端口号 0--1023...函数的作用 该函数采用先前创建好的套接字来对于IP地址以及端口号进行绑定,也就是表示该套接字可以标识出在一个网络中一台确定的主机并且主机中的进程 3....实现本地通信 服务器 只需要服务器创建一个套接字 使该套接字对于本地地址(127.0.0.1)进行绑定,并且绑定一个端口号(1024--65535)就行了 绑定本地地址是为了对于本地计算机的两个进程进程通信...客户端 绑定一个套接字 为了绑定一个进程,可以和服务器进行通信,将消息发送过去的时候要让服务器知道是哪一个进程再和他进程通信 客户端只需要向服务器发送消息 然后再次从客户端接收消息就好了,不需要考虑要进行连接...插图:客户端流程 实现处于同一局域网下的不同主机间进行通信 服务器 和本地通信的一致,只是对于套接字绑定的ip地址不一样了 也对于套接字要绑定该局域网的ip地址以及一个端口号,不需要在绑定本地地址(127.0.0.1
另外,Winsock可以使用TCP/IP、UDP等协议来完成不同类型的数据传输任务。在网络应用程序开发中,套接字通信可以帮助应用程序开发者实现客户端/服务端模型,并实现数据的可靠传输。...,套接字的绑定需要调用bind()函数实现,该函数接受三个参数传递,第一个参数是socket()中创建的套接字文件描述符句柄,该参数用于指定针对哪一个套接字进行操作,第二个参数则是sockaddr_in...类型的结构体,该结构体内用于指定需要绑定套接字的具体类型参数等信息,在如下代码中我们通过ServerAddr.sin_family = AF_INET;将套接字类型设置为了互联网域模式,通过ServerAddr.sin_port...在调用connect(socket_addr)时,需要传递一个参数sockaddr。sockaddr 是一个结构体,包含了客户端与服务器的地址信息,包括其IP地址和端口号。...一般来说,在与服务器进行通信之前,客户端套接字需要使用bind()函数指定一个本地地址和端口,以确保数据可以正确地传输。
在TCP服务器程序接受客户机连接,accept()函数创建并返回一个新的连接套接字用于与客户机的通信,并将这个套接字与请求报文段中的4个值:1该报文段中的源端口号,2源主机IP地址,3该报文段中的目的端口号...也就是说新创建的连接套接字通过这4个值来标识。 所有后续到达的报文段,如果它们的源端口号、源主机IP地址、目的端口号和目的IP地址都与这4个值匹配,则被多路分解到这个套接字。 为什么使用4元组呢?...主机A与主机B及服务器C都有自己的唯一IP地址,主机B为其两个连接分配了两个不同的源端口号(5775和9157)。因为主机A独立选择源端口号,因此它也可能将源端口号9157分配给其HTTP连接。...目的IP地址:一般服务器都有两个网卡,也就是说它会有两个IP地址,所以服务器C得区分一个请求从哪个网卡进来,以便返回响应消息。事实上只有一块网卡的时候也是可以绑定多个IP地址的,这是大家需要注意的。...源IP地址:A和C的浏览器页面即使使用了相同的端口号,但这两个连接有不同的源IP地址,C也需要进行正确地区分。 3 Web服务器与TCP 运行Web服务器的主机,通常在端口80监听请求。
前言 IP地址的作用是唯一识别网络中的主机,IP位于网络层 协议+端口号:可以唯一识别主机中的应用程序(进程) 这样,利用三元组(IP地址,协议、端口)就可以标识网络的进程,网络中的进程通信就可以利用这个标识与其他进程进通信...套接字Socket的来龙去脉: socket即是一种特殊的文件,一些socket函数就是对其进行的操作(打开、读/写IO、关闭),这些函数我们在后面进行介绍。...假设有N个客户端连接服务器,那么复位端共会有N+1个套接字,一个套接字是用于监听(listen())和接受(accept()),其余N个套接字是调用n次accept函数返回的不同套接字。为什么要绑定?...:固定一个端口 8.1.2 TCP服务器端通信过程: 服务器侧: 由监听套接字监听客户端口的连接情况,当监听到客户端口的连接后,开始绑定端口(bind)并由接受(accept)产生一个通信套接字,通过对该通信套接字的读写实现服务器端和客户端的通信...); 客户端输入IP地址和端口号之后,点击按钮connect和服务器端进行连接,连接的具体方式为:首先获取服务器的IP,也就是获取行编辑区的输入内容,然后是获取端口信号,然后将前两者作为传入参数使用连接函数与服务器进行连接
套接字地址端口绑定 做过消息通讯服务器的朋友应该都清楚,我们需要向服务端 指定IP与端口 ,即使是NIO服务器也是一样的,否则,我们的客户端会报 java.net.ConnectException: Connection...refused: connect 异常 对于NIO的地址端口绑定,我们也需要用到 ServerSocket服务器套接字 。...InetSocketAddress有一个需要一个port为参数的构造方法,它将创建 一个ip为通配符、端口为指定值的套接字地址 。这很方便我们的开发,对吧?...InetSocketAddress address = new InetSocketAddress(port); //5、将服务器绑定到选定的套接字地址 serverSocket.bind...InetSocketAddress address = new InetSocketAddress(port); //5、将服务器绑定到选定的套接字地址 serverSocket.bind
其实TCP/IP协议族已经帮我们解决了这个问题,网络层的“ip地址”可以唯一标识网络中的主机,而传输层的“协议+端口”可以唯一标识主机中的应用程序(进程)。...TCP/IP协议存在于OS中,网络服务通过OS提供,在OS中增加支持TCP/IP的系统调用——Berkeley套接字,如Socket,Connect,Send,Recv等 UDP(User Data Protocol...当应用程序要创建一个套接字时,操作系统就返回一个小整数作为描述符,应用程序则使用这个描述符来引用该套接字需要I/O请求的应用程序请求操作系统打开一个文件。...套接字设计的总体思路是,单个系统调用就可以创建任何套接字,因为套接字是相当笼统的。一旦套接字创建后,应用程序还需要调用其他函数来指定具体细节。例如调用socket将创建一个新的描述符条目: ?...通常服务器在启动的时候都会绑定一个众所周知的地址(如ip地址+端口号),用于提供服务,客户就可以通过它来接连服务器;而客户端就不用指定,有系统自动分配一个端口号和自身的ip地址组合。
,用于将协议地址绑定到指定套接字中去,返回0表明成功,-1表示失败,具体失败原因,被存放于全局变量errno。...addr中的ip地址可以为0(INADDR_ANY),表示使用通配地址;而端口为0,表示由内核分配一个临时端口。服务器需要被客户端连接,因此其端口通常都是确定的,不会选择一个临时端口。...但是在客户端其ip地址和端口并非需要确切知道,因此客户端常常不绑定端口。在我们的echo程序中,我们也没有在客户端调用bind函数。...一个服务器通常一直有且只有一个监听套接字描述符,但通常会有多个已连接套接字描述符。还记得在《网络编程-一个简单的echo程序(0)》中问到的吗?...为什么客户端连接到服务端后,服务端有一个处于LISTEN状态,还有一个处于ESTABLISHED状态吗? 通过已连接套接字描述符就可以对其进行数据的读写了。
前序 UDP(用户数据报协议)没有连接的,是面向数据报的,是不可靠 # 套接字就是IP地址+端口号 IP地址:4字节 端口号:2字节,也就是说范围是0~65536 端口号分为 知名端口号 0–1023:...函数的作用 该函数采用先前创建好的套接字来对于IP地址以及端口号进行绑定,也就是表示该套接字可以标识出在一个网络中一台确定的主机并且主机中的进程 3....实现本地通信 服务器 只需要服务器创建一个套接字 使该套接字对于本地地址(127.0.0.1)进行绑定,并且绑定一个端口号(1024–65535)就行了 绑定本地地址是为了对于本地计算机的两个进程进程通信...客户端 绑定一个套接字 为了绑定一个进程,可以和服务器进行通信,将消息发送过去的时候要让服务器知道是哪一个进程再和他进程通信 客户端只需要向服务器发送消息 然后再次从客户端接收消息就好了,不需要考虑要进行连接...插图:客户端流程 实现处于同一局域网下的不同主机间进行通信 服务器 和本地通信的一致,只是对于套接字绑定的ip地址不一样了 也对于套接字要绑定该局域网的ip地址以及一个端口号,不需要在绑定本地地址(127.0.0.1
Socket模块介绍 Socket模块简单理解就是对socket套接字的封装,当然不是简单的对socket套接字接口的封装,还需要实现一些方法,比如启动非阻塞通信、创建客户端连接、创建服务器连接等。...其意义是程序中对于套接字的各项操作更加简便。...由于这次服务器并不需要关心客户端的ip端口,并且在后续创建服务器连接的时候,服务器会绑定"0.0.0.0"所有可用的网络接口,因此填入NULL即可。...客户端的套接字通常**不需要手动绑定**(bind)地址和端口号,是因为: ①通常当客户端创建一个套接字的时候,系统会自动分配端口号,不需要用户在创建时显示绑定,系统会自动绑定的。...②一般是客户端主动发起连接,不是服务器主动发起连接,因此这也说明了服务器是需要显示绑定,而客户端不需要显示绑定。 ③客户端的ip地址是动态获取的。
其实TCP/IP协议族已经帮我们解决了这个问题,网络层的“ip地址”可以唯一标识网络中的主机,而传输层的“协议+端口”可以唯一标识主机中的应用程序(进程)。...一旦套接字创建后,应用程序还需要调用其他函数来指定具体细节。...通常服务器在启动的时候都会绑定一个众所周知的地址(如ip地址+端口号),用于提供服务,客户就可以通过它来接连服务器;而客户端就不用指定,有系统自动分配一个端口号和自身的ip地址组合。...此时我们需要区分两种套接字, 监听套接字: 监听套接字正如accept的参数sockfd,它是监听套接字,在调用listen函数之后,是服务器开始调用socket()函数生成的,称为监听socket...内核为每个由服务器进程接受的客户连接创建了一个已连接socket描述字,当服务器完成了对某个客户的服务,相应的已连接socket描述字就被关闭。 自然要问的是:为什么要有两种套接字?
接下来协议栈会给等待连接的套接字复制一个副本, 然后将连接对象等控制信息写入新的套接字中,为什么这里要创建副本简单解释一下,因为如果直接使用原有的套接字连接,那么当新的客户端请求过来,就必须要再次创建新的套接字然后再次进行连接...客户端 IP 地址客户端端口号服务器 IP 地址服务器端口号图片从上面这幅图可以看到,服务端可能会在一个端口上创建副本绑定很多个套接字,但是客户端的端口是完全不同并且随机的,同时IP地址也不一样,所以可以确定套接字之间是不会存在冲突的...套接字准备完成之后,接着是对于网络包进行FCS 的校验,当 FCS 一致确认数据没有错误时,接下来需要检查 MAC 头部中 的接收方 MAC 地址,看看这个包是不是发给自己的,之后网卡的 MAC 模块将网络包从信号还原为数字信息...为什么还要使用描述符呢?这里回顾一下描述符的内容,描述符指的是在创建套接字之后,服务端需要返回给客户端一条标识信息,目的是告知客户端自己是谁,协议栈也需要返回描述符用于标识是哪一个套接字在进行传数据。...TCP 模块操作小结(1)根据收到的包的发送方 IP 地址、发送方端口号、接收方 IP 地址、接收方端口号找到相对应的套接字;(2)将数据块拼合起来并保存在接收缓冲区中;(3)向客户端返回 ACK。
通信过程(复杂) 较为复杂的通信过程如:www.baidu.com 说明 在浏览器中输入一个网址时,需要将它先解析出ip地址来当得到ip地址之后,浏览器以tcp的方式3次握手链接服务器以tcp的方式发送...(1024) print(recvData) udp_socket.close() Socket 对象(内建)方法 函数描述服务器端套接字s.bind()绑定地址(host,port)到套接字, 在AF_INET...但是如果需要做成一个服务器端的程序的话,是需要绑定的,想想看这又是为什么呢? 如果报警电话每天都在变,想必世界就会乱了,所以一般服务性的程序,往往需要一个固定的端口号,这就是所谓的端口绑定。 ...TCP服务器 在Python程序中,如果要完成一个TCP服务器的功能,需要的流程如下: 1、socket创建一个套接字。...,所以只要确定好服务端的ip、port等信息就好,本地客户端可以随机tcp服务端中通过listen可以将socket创建出来的主动套接字变为被动的,这是做tcp服务端时必须要做的当客户端需要连接服务端时
即本端的IP地址 public int getPort() 此套接字连接到的远程端口号;如果尚未连接套接字,则返回 0 public int getLocalPort() 返回此套接字绑定到的本地端口...需要创建新的套接字对象。...(int port) :创建一个服务器端套接字,并绑定到指定端口上。...套接字将被绑定到通配符地址,IP 地址由内核来选择。...如果 IP 地址为 0.0.0.0,套接字将被绑定到通配符地址,IP 地址由内核选择 public void close() 关闭此数据报套接字: public void send(
其定义类似于文件句柄的定义。...3、原始套接字(raw-protocol interface) 定义: #define SOCK_RAW 3 原始套接字保存了数据包中的完整IP头,前面两种套接字只能收到用户数据。...on debugging info recording */ //是否监听模式 #define SO_ACCEPTCONN 0x0002 /* socket has had listen() */ //套接字与其他套接字的地址绑定...将本地地址绑定到所创建的套接字上。...:(服务器端) int listen(SOCKET s, int backlog ) s为一个已绑定但未联接的套接字。
其底层的协议——网际协议(IP)只有一个地址族,它使用一种特定的方式来指定网络中的计算机,即IP地址。...三、绑定 SOCK_STREAM 式本地套接字的通信双方均需要具有本地地址,其中服务器端的本地地址需要明确指定,指定方法是使用 struct sockaddr_un 类型的变量,将相应字段赋值,再将其绑定在创建的服务器套接字上...socket表示服务器端的套接字描述符,address 表示需要绑定的本地地址,是一个 struct sockaddr_un 类型的变量,address_len 表示该本地地址的字节长度。...如果想要多个连接并发处理,则需要创建线程,将每个连接交给相应的线程并发处理。 客户端套接字创建完毕并赋予本地地址值后,需要连接到服务器端进行通信,让服务器端为其提供处理服务。...在 TCP/IP 协议中,IP 地址的首字节为 127 即代表本地,因此本地套接字通信可以使用 IP 地址为 127.x.x.x 的网络套接字来实现。
该调用通过传递进来的文件描述符找到对应的socket结构,把一个地址族中的特定地址赋给socket,也可以说是绑定ip端口和socket。...ipv4:sockaddr_in ipv6:sockaddr_in6 Unix域:sockaddr_un 通常服务器在启动的时候都会绑定一个众所周知的地址(如ip地址+端口号),用于提供服务,客户就可以通过它来接连服务器...区别:我们所创建的监听套接字一般服务器只创建一个,并且一直存在。而内核会为每一个服务器进程的客户连接建立一个连接套接字,当服务器完成对某个给定客户的服务时,连接套接字就会被关闭。...内核为每个由服务器进程接受的客户连接创建了一个已连接socket描述字,当服务器完成了对某个客户的服务,相应的已连接socket描述字就被关闭。 为什么要有两种套接字?...socket描述字,第二参数为服务器的socket地址,第三个参数为socket地址的长度。
2.2.sockaddr 结构体 UDP 网络程序 3.字符串回响 3.1.核心功能 3.2.程序结构 服务器设计 3.3.创建套接字 3.4.绑定IP地址和端口号 3.5.启动服务器 客户端设计 3.6...都已经被占用了,如果再创建文件描述符,会从 3 开始,可以看到,程序运行后,创建的套接字正是 3,证明套接字本质上就是文件描述符,不过它用于描述网络资源 3.4.绑定IP地址和端口号 注意: 我这里的服务器是云服务器...函数,这个函数在进行转换的同时,会将主机序列转换为网络序列 绑定IP地址和端口号这个行为并非直接绑定到当前主机中,而是在当前程序中,将创建的 socket 套接字,与目标IP地址与端口号进行绑定,当程序终止后...,这是因为当前我使用的是云服务器,云服务器是不允许直接绑定公网 IP 的,解决方案是在绑定 IP 地址时,让其选择绑定任意可用 IP 地址 修改代码 云服务器中不需要明确 IP 地址 构造时也无需传入...IP 地址 与 端口号,配合请求的资源路径,就能获取服务器资源了 3.7.初始化客户端 初始化客户端时,同样需要创建 socket 套接字,不同于服务器的是 客户端不需要自己手动绑定 IP 地址与端口号
领取专属 10元无门槛券
手把手带您无忧上云