一丶tcp为什么称为可靠协议(流式协议)
TCP之所以可靠的原因在于:反馈机制
发送消息后必须等到对方回应 才会将内存中的数据清除
双向通道,数据传输安全
意外断开,一段时间会重复等待连接,过后再断开连接
二丶UDP为什么被称为不可靠协议(数据报协议)
无需双向通道
数据是不安全的
服务端不存在,也可以发消息但是数据会丢失
三丶两者区别
UDP跟TCP的区别:1.多个客户端可以实现并发的效果2.服务端不存在 客户端也不会报错(sendto)3.不...
一、ip地址
1. 什么是地址
地址就是用来标记地点的
2. ip地址的作用
ip地址:用来在网络中标记一台电脑,比如192.168.1.1;在本地局域网上是唯一的。
3. ip地址的分类
每一个IP地址包括两部分:网络地址和主机地址
3.1 A类IP地址
一个A类IP地址由1字节的网络地址和3字节主机地址组成,网络地址的最高位必须是“0”,
地址范围1.0.0.1-126.255.255.254
二进制表示为:00000001 00000000 00000000 00000001 - 01111110 1111111...
这三个选项十分有意思,并且困扰了很多人。特别是cork选项,它到底和nodelay有什么区别,到底怎样影响了Nagle算法。在tcp的实现中(特指linux内核的协议栈实现),cork和nodelay非常让人看不出区别,这一块的实现非常复杂,看内核实现之前最好先明白它们大概在说什么,否则很容易迷失的。
所谓的cork就是塞子的意思,形象地理解就是用cork将连接塞住,使得数据先不发出去,等到拔去塞子后再发出去,而nodelay事实上是为了禁用Na...
UDP聊天实现循环发送消息
public static void main(String[] args) throws Exception{DatagramSocket socket = new DatagramSocket(8888);//准备数据,控制台读取 system.inBufferedReader reader = new BufferedReader(new InputStreamReader(System.in));while (true) {String data = reader.readLine();byte[] datas = data.getBytes();DatagramPacket packet = new DatagramPacket(datas, 0, datas.length, new InetSocketAdd...
随着网络技术飞速发展,网速已不再是传输的瓶颈,UDP协议以其简单、传输快的优势,在越来越多场景下取代了TCP,如网页浏览、流媒体、实时游戏、物联网。
1,网速的提升给UDP稳定性提供可靠网络保障
CDN服务商Akamai(NASDAQ: AKAM)报告从2008年到2015年7年时间,各个国家网络平均速率由1.5Mbps提升为5.1Mbps,网速提升近4倍。网络环境变好,网络传输的延迟、稳定性也随之改善,UDP的丢包率低于5%,如果再使用应用层重传,能够完...
基于UDP的服务端编程
1、创建套接字
sockfd = socke(AF_INET, SOCK_DGRAM)
2、绑定地址
sockfd.bind()
3、消息收发
data, addr = sockfd.recvfrom(buffersize)
功能:接受UDP消息
参数:每次最多接收消息的大小 字节
返回值:data 接收到的内容addr 消息发送方的地址
sockfd.sendto(data, addr)
功能:UDP消息发送
参数:data 要发送的内容 bytesaddr 目标地址
返回:发送字节数
4、关闭套接字
sockfd.cl...
协议森林07 傀儡 (UDP协议)作者:Vamei
出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明。谢谢! 我们已经讲解了物理层、连接层和网络层。最开始的连接层协议种类繁多(Ethernet、Wifi、ARP等等)。到了网络层,我们只剩下一个IP协议(IPv4和IPv6是替代关系)。进入到传输层(transport
layer),协议的种类又开始繁多起来(比如TCP、UDP、SCTP等)。这就好像下面的大树,根部(连接层)分叉很多,然后统一到一个树干(网络...
针对UDP数据的4种NAT行为针对收发UDP数据,NAT可分为Full Cone、Restricted Cone、Port Restricted Cone、Symmetric NAT四类,在RFC3489中有定义(http://datatracker.ietf.org/doc/rfc3489/?include_text=1)。1. Full Cone:所有从相同的内部IP和PORT发出的请求都映射为相同的外部IP和PORT,而后任何外部主机只要发送数据包给NAT的IP和PORT就会被转发给内部主机。从图中可以看到,只要内部主机通过NAT访问了一次外部主机,在Mappin...
在TCP/IP协议当中。TCP作为传输控制协议在运输层,IP协议在网络层。 运输层还有UDP协议,是无连接的协议,好比数据包,不能传送的顺序,正确性,甚至可能丢失。不够想iTCP来说,网络的搭建相对容易。构建的套接字中,我们选用AF_INET协议家族(默认),套接字类型SOCK_DGARM. 首先,构建一个server#!/root/Anaconda3/envs/py36/bin python
# -*- coding: utf-8 -*-
# @Time : 2020/3/18 21:51
# @Author : a-runner
# @Site :
...
如何计算UDP/TCP检验和checksum一、下面的图是一个UDP的检验和所需要用到的所有信息,包括三个部分:1.UDP伪首部2.UDP首部3.UDP的数据部分(切记不要遗漏该部分,否则就~吐血了~)首先解释下伪首部的概念,伪首部包含IP首部一些字段。其目的是让UDP两次检查数据是否已经正确到达目的地,只是单纯为了做校验用的。还有一个概念十分重要,那就是16位UDP总长度,请注意该长度不是报文的总长度,而只是UDP(包括UDP头和数据部分)的总长...
1: using System; 2: using System.Net; 3: using System.Net.Sockets; 4: using System.Text; 5: 6: 7: publicclass UDPListener 8: { 9: privateconstint listenPort = 5050; 10: privateconstint Height = 200; 11: privateconstint Width = 100; 12: privatestaticvoid StartListener() 13: { 14: bool[,] test = newbool[Height, Width]; //二维数组的定义方式 15: byte[,] t...
在上篇文章中,在PSNet工具集中创建了Send-TCPMessage和Receive-TCPMessage两个函数实现了通过PowerShell收发TCP消息包的功能,有了TCP包的发送和接收,自然少不了UDP消息包的发送和接收,本文将会介绍通过PowerShell发送和接收UDP消息包的方法。为了能跟之前的PSNet程序集匹配,继续基于此程序集进行扩展,在$env:PSSpace\PSNet下创建UDPOp目录,在其中创建Receive-UDPMessage.ps1和Send-UDPMessage.ps1两个文件,代码稍后插入。在...
目录
subprocess模块
struct模块
粘包
UDP协议
socket_server模块
subprocess模块
作用:
1.可以帮你通过代码执行操作系统的终端命令
2.并返回终端执行命令后的结果
import subprocesscmd = input('cmd>>')
obj = subprocess.Popen(cmd, shell=True, stderr=subprocess.PIPE, # 返回正确结果参数stdout=subprocess.PIPE # 返回错误结果参数)result = obj.stdout.read() + obj.stderr.read()
print(result.decode('gbk')) ...
UDPUDP是网络传输层协议,面向无连接,不可靠,不保证数据能够准确无误的传输,但是效率高。
因为UDP是无连接的协议,客户端的DatagramSocket与服务器端的DatagramSocket不存在一一对应的关系,两者无需建立连接,就能交换数据报。
DatagramSocket提供了接收和发送数据报的方法:1. 接收数据报:public void receive(DatagramPacket dst)throws IOException2. 发送数据报:public void send(DatagramPacket src)throws IOEception
...
服务端public class Weather extends Thread{String weather = "节目预报,八点有大型晚会,请收听";int port = 9898;InetAddress iaddress = null;MulticastSocket socket = null;Weather() {try {iaddress = InetAddress.getByName("224.255.10.0");socket = new MulticastSocket(port);socket.setTimeToLive(1);socket.joinGroup(iaddress);} catch (Exception e) {e.printStackTrace();}}@Overridepublic void run() {// TODO ...