团队建设游戏网站,dell网站设计特色,wordpress 分类不显示全文,东华建设官方网站尝试从编程的角度解释各种网络协议。
UDP和TCP的关系 从Python的socket编程角度出发#xff0c;UDP#xff08;User Datagram Protocol#xff09;和TCP#xff08;Transmission Control Protocol#xff09;是两种不同的传输协议。
TCP是一种面向连接的协议#xff0c… 尝试从编程的角度解释各种网络协议。
UDP和TCP的关系 从Python的socket编程角度出发UDPUser Datagram Protocol和TCPTransmission Control Protocol是两种不同的传输协议。
TCP是一种面向连接的协议提供可靠的、有序的、双向的数据传输。在TCP中客户端和服务器之间首先要建立连接然后通过该连接进行数据传输最后再关闭连接。TCP保证数据的可靠性通过拥塞控制和流量控制等机制来确保数据的有序传输。UDP是一种无连接的协议提供不可靠的、无序的、面向报文的数据传输。在UDP中客户端和服务器之间不需要建立连接可以直接进行数据传输。UDP不保证数据的可靠性也没有拥塞控制和流量控制等机制适用于一些实时性要求较高的应用如流媒体等。 在Python的socket编程中可以使用socket模块创建UDP和TCP的套接字进行网络通信。使用UDP套接字进行通信时可以通过socket的sendto()和recvfrom()方法发送和接收UDP报文。而使用TCP套接字进行通信时可以通过socket的connect()方法建立连接然后使用send()和recv()方法进行数据传输。
code
下面是一个使用UDP套接字的示例代码
import socket# 创建UDP套接字
udp_socket socket.socket(socket.AF_INET, socket.SOCK_DGRAM)# 发送UDP数据报文
udp_socket.sendto(bHello, UDP, (127.0.0.1, 8888))# 接收UDP数据报文
data, addr udp_socket.recvfrom(1024)
print(Received:, data.decode())# 关闭UDP套接字
udp_socket.close()下面是一个使用TCP套接字的示例代码
import socket# 创建TCP套接字
tcp_socket socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 创建TCP欢迎套接字使用IPv4协议# 建立TCP连接
tcp_socket.connect((127.0.0.1, 8888))# 向服务器发起连接先进行三次握手然后建立TCP连接# 发送TCP数据
tcp_socket.send(bHello, TCP)# 接收TCP数据 从服务器接收信息
data tcp_socket.recv(1024)
print(Received:, data.decode())# 关闭TCP连接
tcp_socket.close()
import socket
# 创建TCP套接字
serverSocket socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 将TCP欢迎套接字绑定到端口8899
serverSocket.bind((127.0.0.1, 8888)) # 定义最大连接数
serverSocket.listen(10)
print(server start)while True:# 接收到客户连接请求后调用accept()方法创建新的TCP连接套接字由这个客户专用进行握手后建立一个TCP连接connectionSocket, addr serverSocket.accept() # 获取客户发送的字符串sentence connectionSocket.recv(1024) # 向用户发送修改后的字符串connectionSocket.send(bni hao) # a bytes-like object# 关闭TCP连接套接字connectionSocket.close() 类似项目 用Python Socket TCP实现的简易Cli聊天室https://github.com/FlyAndNotDown/ChatRoom/blob/master/server/server.py
http
http协议在ip协议之上对吗 无关。我完全可以手写HTTP请求文本写纸上用邮政寄出去对方收到后瞪眼法读到内容把响应同样写在纸上寄回来给我读。全过程没有IP协议参与。
code
c 一个简单的请求程序
http和tcp的区别 超文本传输协议是一个基于请求与响应无状态的应用层的协议所以其重点在文本tcp重点才在传输。 http协议只是软件之间约定的协议定义如下格式:
请求行 回车换行,请求头 回车换行,请求头 回车换行 …… 请求头 回车换行 回车换行 数据
长连接和短连接
在网络通信中长连接和短连接是指客户端和服务器之间建立连接的时间长短。 长连接长连接是指客户端和服务器之间建立的连接可以长时间保持打开状态。一旦建立了长连接客户端和服务器可以进行多次的数据传输而无需每次都重新建立连接。 短连接短连接是指客户端和服务器之间建立的连接是短暂的一旦完成数据传输该连接就会被关闭。每次通信都需要重新建立连接传输完成后立即关闭连接。上边的例子就是短链接。
长连接的实现通常需要考虑以下几个方面 保持连接为了实现长连接客户端和服务器需要保持连接的打开状态。这可以通过客户端和服务器之间发送周期性的心跳信号来实现以确保连接保持活跃。心跳信号可以是空数据包或特定的控制信息用于告知对方连接仍然存在。 连接管理服务器需要维护并管理客户端的连接状态。这包括向服务器注册连接、断开连接或关闭空闲连接等。服务器需要用数据结构如哈希表或连接池来管理连接以确保有效地处理和响应客户端请求。 优化网络资源长连接会占用服务器资源因此需要对网络资源进行优化。这包括合理限制同时连接的数量使服务器能够处理其他请求并对长时间闲置的连接进行关闭或重用。 异常处理和容错机制考虑到长连接可能会因为网络中断、服务器故障或其他异常而中断需要实现异常处理和容错机制。这可以包括重连机制、连接超时判断和恢复机制等以确保连接的稳定性和可靠性。 心跳检测为了保持连接活跃客户端和服务器可以周期性地进行心跳检测。如果在一定时间内未收到心跳信号则可以判断连接已断开进而重新建立连接。 会话管理和身份验证在长连接中对于每个连接需要进行会话管理和身份验证。这确保只有经过身份验证的用户可以使用长连接并且可以对每个会话进行个性化的处理。
DNS —— IP地址查询 当用户在浏览器中输入一个域名时操作系统会向本地的DNS解析器发出DNS查询请求。本地DNS解析器首先会查询本地缓存中是否存在该域名对应的IP地址。如果没有它将向根域名服务器发出查询请求。根域名服务器会返回一组顶级域名服务器的IP地址然后本地DNS解析器会发送查询到顶级域名服务器。这个过程会逐级迭代直到获取到目标域名对应的IP地址。一旦本地DNS解析器获取到了域名对应的IP地址它会将这个结果返回给操作系统操作系统再将其传递给用户的应用程序如浏览器。然后应用程序可以使用这个IP地址与远程服务器进行通信。DNS使用TCP和UDP端口53。当前对于每一级域名长度的限制是63个字符域名总长度则不能超过253个字符。 DNS采用了缓存机制一旦某个域名的解析结果被本地DNS服务器缓存后续的查询将会更快速减少了网络延迟。此外DNS还支持递归查询和迭代查询等技术可以进一步提高查询效率。如果本地DNS服务器没有缓存某个域名的解析结果它必须向上层的DNS服务器发出查询请求。这种查询和响应的过程可能会导致一定的查询延迟。
相关项目
DNSChef是一种网络安全工具用于拦截和修改DNS域名系统查询和响应从而实现DNS欺骗的目的。它允许用户将特定的DNS查询重定向到用户自定义的IP地址或域名从而控制特定的网络通信。
DNSChef的工作原理如下 DNS查询拦截DNSChef可以通过在本地计算机上运行作为DNS服务器的代理拦截目标计算机发送的DNS查询请求。当目标计算机发起DNS查询时它将查询发送到DNSChef代理而不是真实的DNS服务器。这样DNSChef就能够检查和修改该DNS查询。 DNS查询修改一旦DNSChef捕获到DNS查询请求它可以根据用户的设置对该查询进行修改。用户可以设置自定义的IP地址将查询重定向到指定的IP地址。也可以设置自定义的域名将查询重定向到指定的域名。另外还可以根据需要修改DNS查询中的其他信息如TTL存活时间等。 DNS响应模拟除了拦截和修改DNS查询外DNSChef还可以模拟DNS响应。它可以根据用户的设置生成自定义的DNS响应并将其返回给目标计算机。这可以用于实现钓鱼攻击、网络监控和调试等用途。
https://github1s.com/bigsnarfdude/pythonNetworkProgrammingN00B/blob/master/dnschef.pyhttps://github.com/dweekly/dnschathttps://github.com/soobbu/PeerLink
arp —— 物理地址查询 ARPAddress Resolution Protocol是用于将IP地址解析为对应MAC地址的协议它在局域网内部工作。使用 ARP计算机 A 可以使用 IP 地址向该区域中的每台计算机发送请求(发送方发送ARP请求广播)。如果另一台计算机将 IP 识别为自己的 IP则可以使用相应的 MAC 地址进行响应。当计算机 A 收到响应时它知道如何沿数据链路层发送其原始消息。 下面是ARP的工作过程 当一个主机发送方要发送数据包到另一个主机目标方它首先检查自己的ARP缓存表ARP Cache查看是否已经有了目标主机的IP地址对应的MAC地址。如果存在对应的缓存项发送方就可以直接使用该MAC地址。 如果ARP缓存中没有目标主机的MAC地址发送方就会发送一个ARP请求广播包ARP Request Broadcast到局域网上的所有主机。该广播包中包含发送方的IP地址和MAC地址。 收到ARP请求广播的主机包括目标方和其他主机会检查自己的IP地址是否与广播包中的目标IP地址匹配。如果匹配就将自己的MAC地址发送给发送方构成一个ARP响应ARP Reply。 发送方收到ARP响应后将目标主机的IP地址和MAC地址保存在ARP缓存表中以备将来使用。 一旦发送方获取到目标主机的MAC地址它就可以构建一个带有目标主机MAC地址的数据包并将其发送到目标主机。目标主机接收到数据包后根据自己的IP地址判断是否接收该数据包。
你可能已经注意到了ARP感觉有点脆弱。任何设备都可以声称与某个IP地址相关联网络上的其他人都会相信它们。当恶意进行时这在安全领域是众所周知的 ARP 欺骗攻击。所以IPv6用新协议取代了ARP。
相关项目
arpchat用 ARP 协议实现的在线聊天工具 https://github.com/kognise/arpchat
CG
OSI 的七层模型
开放式系统互联通信参考模型英语Open System Interconnection Reference Model缩写为 OSI
物理层,数据链路层,网络层,传输层,会话层,表示层,应用层
物理层利用传输介质为数据链路层提供物理连接实现比特流的透明传输。 数据链路层负责建立和管理节点间的链路。 网络层通过路由选择算法为报文或分组通过通信子网选择最适当的路径。 传输层向用户提供可靠的端到端的差错和流量控制保证报文的正确传输。 会话层向两个实体的表示层提供建立和使用连接的方法。 表示层处理用户信息的表示问题如编码、数据格式转换和加密解密等。 应用层直接向用户提供服务完成用户希望在网络上完成的各种工作。
你是如何理解“TCP是面向字节流的协议”的UDP协议为应用层提供不可靠、无连接和基于数据报的服务。所以使用UDP协议的应用程序通常要自己处理数据确认、超时重传等逻辑。而TCP协议则完全相反为应用层提供可靠的、面向连接的和基于流的服务。https://docs.python.org/3/library/socket.html【巧用wireshark快速找出摄像头ip-哔哩哔哩】 https://b23.tv/vvXMv24https://blog.csdn.net/wj31932/article/details/89634302 单向能ping通反向不可以多半是防火墙原因终于有人把tcp、http、rpc和grpc总结完整了【可视化爬虫EasySpider一个无需写代码可视化的几分钟设计一个爬虫的开源免费软件-哔哩哔哩】 https://b23.tv/yhIu5mG【ICLR-23 Oral 探索网络结构和域泛化能力的关系-哔哩哔哩】 https://b23.tv/6U3xqTW