udp

TCP & UDP

末鹿安然 提交于 2020-02-20 19:27:01
目录: TCP 协议; 一:TCP协议段格式 二:确认应答(ACK)机制 三 : 超时重传机制 四:连接管理机制 五:滑动窗口 六:流量控制 七:拥塞控制 八:延迟应答 九:捎带应答 十:面向字节流 十一:粘包问题 十二:TCP异常情况 UDP协议 1.协议段格式 2.UDP特点 TCP 协议(Transmission Control Protocol) **TCP可靠性的内容:**校验和,序列号(按序到达),确认应答,超时重发,连接管理,流量控制,拥塞控制 **TCP提高性能的内容:**滑动窗口,快速重传,延迟应答,捎带应答 前置知识:端口号:端口号(Port)标识了一个主机上进行通信的不同的应用程序; 在TCP/IP协议中, 用 “源IP”, “源端口号”, “目的IP”, “目的端口号”, “协议号” 这样一个五元组来标识一个通信(可以通过netstat -n查看); 一:TCP协议段格式* 源/目的端口号: 表示数据是从哪个进程来, 到哪个进程去; 32位序号/32位确认号: 4位TCP报头长度: 表示该TCP头部有多少个32位bit(有多少个4字节); 所以TCP头部最大长度是15 * 4 = 60 6位标志位: URG: 紧急指针是否有效 ACK: 确认号是否有效 PSH: 提示接收端应用程序立刻从TCP缓冲区把数据读走 RST: 对方要求重新建立连接;

netstat命令详解

谁都会走 提交于 2020-02-20 13:59:04
netstat命令用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。netstat是在内核中访问网络及相关信息的程序,它能提供TCP连接,TCP和UDP监听,进程内存管理的相关报告。 netstat常用命令参数 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 usage: netstat [-veenNcCF] [<Af>] -r netstat {-V|--version|-h|--help} netstat [-vnNcaeol] [<Socket> ...] netstat { [-veenNac] -I[<Iface>] | [-veenNac] -i | [-cnNe] -M | -s } [delay] -r, --route display routing table -I, --interfaces=<Iface> display interface table for <Iface> -i, --interfaces display interface table -g, -- groups display multicast group memberships -s, --statistics display

python- 粘包 struct,socketserver

隐身守侯 提交于 2020-02-19 08:31:33
黏包 黏包现象 让我们基于tcp先制作一个远程执行命令的程序(命令ls -l ; lllllll ; pwd) 1 res=subprocess.Popen(cmd.decode('utf-8'), 2 shell=True, 3 stderr=subprocess.PIPE, 4 stdout=subprocess.PIPE) 5 6 的结果的编码是以当前所在的系统为准的,如果是windows,那么res.stdout.read()读出的就是GBK编码的,在接收端需要用GBK解码 7 8 且只能从管道里读一次结果 9 10 注意 注意 同时执行多条命令之后,得到的结果很可能只有一部分,在执行其他命令的时候又接收到之前执行的另外一部分结果,这种显现就是黏包。 基于tcp协议实现的黏包 1 #_*_coding:utf-8_*_ 2 from socket import * 3 import subprocess 4 5 ip_port=('127.0.0.1',8888) 6 BUFSIZE=1024 7 8 tcp_socket_server=socket(AF_INET,SOCK_STREAM) 9 tcp_socket_server.setsockopt(SOL_SOCKET,SO_REUSEADDR,1) 10 tcp_socket_server.bind(ip_port)

nmap 扫描软件

佐手、 提交于 2020-02-19 08:31:24
nmap 是一款扫描软件, Windows 和 Linux 平台都有版本。 Linux 平台下安装比较简单,使用 yum install nmap ,我的服务器因为安装了MySQL 好像和yum 有冲突 ,必须加--disableplugin=fastestmirror 参数,以前BLOG里说过。 Windows 平台 Nmap 5.21 华军下载 http://www.onlinedown.net/soft/69679.htm [root@243 ~]# yum --disableplugin=fastestmirror install nmap Setting up Install Process Resolving Dependencies --> Running transaction check ---> Package nmap.i386 2:4.11-1.1 set to be updated --> Finished Dependency Resolution Dependencies Resolved ================================================================================ Package Arch Version Repository Size ===============

网络osi七层模型——传输层和应用层

和自甴很熟 提交于 2020-02-18 15:18:31
网络osi七层模型—传输层和应用层 传输层 TCP/IP是指一整套数据通信协议,传输层完成端到端的连接和传输 TCP/IP传输层包含以下两个协议: * 传输控制协议TCP(Transmission Control Protocol) * 用户数据报文协议UDP(User Dategram Protocol) UDP是一个简单的面向数据包的传输层协议 * UDP不提供可靠性 * 传输小数据文件中发挥了重要的作用 * QQ聊天就是使用了UDP的传输机制 应用层 应用层的功能:和应用程序协同工作,利用基础网络交换应用程序之间专用的数据。 常用的应用层协议: * http超文本传输协议 * 用于传输Internet浏览器使用的普通文本、超文本、音频和视频等数据 * 端口号为tcp的80端口 * https基于安全套接字层的http协议 * 基于http开发,提供加密,可以确保消息的私有性和完整性 * 端口号为443端口 * ftp文件传输协议 * 用于传输文件 * 端口为TCP的21和20端口 * dns域名系统 * 用来完成域名与IP地址之间的映射 * 端口号为TCP或UDP的53端口 * smtp邮件传输协议 * 用于发送和接收邮件 * 端口号为25 * pop3邮局协议 * 用于客户端接收邮件 * 端口号为110 * ssh安全外壳协议 * SSH 为建立在应用层基础上的安全协议

Java_TCP和UDP协议的联系与区别

孤者浪人 提交于 2020-02-18 14:35:17
TCP协议: TCP(Transfer Control Protocol)是面向连接的,所谓面向连接,就是当计算机双方通信时必需经过先建立连接,然后传送数据,最后拆除连接三个过程。 TCP在建立连接时又分三步走: 第一步,是请求端(客户端)发送一个包含SYN即同步(Synchronize)标志的TCP报文,SYN同步报文会指明客户端使用的端口以及TCP连接的初始序号。 第二步,服务器在收到客户端的SYN报文后,将返回一个SYN+ACK的报文,表示客户端的请求被接受,同时TCP序号被加一,ACK即确认(Acknowledgement)。 第三步,客户端也返回一个确认报文ACK给服务器端,同样TCP序列号被加一,到此一个TCP连接完成。然后才开始通信的第二步:数据处理。 这就是所说的TCP的三次握手(Three-way Handshake)。 UDP协议: 基于TCP协议可以建立稳定连接的点对点的通信。这种通信方式实时、快速、安全性高,但是很占用系统的资源。 在网络传输方式上,还有另一种基于UDP协议的通信方式,称为数据报通信方式。在这种方式中,每个数据发送单元被统一封装成数据报包的方式,发送方将数据报包发送到网络中,数据报包在网络中去寻找它的目的地。 TCP协议和UDP协议的联系和区别: TCP协议和UDP协议是传输层的两种协议。Socket是传输层供给应用层的编程接口

UDP Server and Client under Linux

白昼怎懂夜的黑 提交于 2020-02-18 07:55:45
// server.cpp #include <sys/types.h> #include <sys/socket.h> #include <string.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #define MAXLINE 80 #define SERV_PORT 8888 void do_echo(int sockfd, struct sockaddr *pcliaddr, socklen_t clilen) { int n; socklen_t len; char mesg[MAXLINE]; for(;;) { len = clilen; /* waiting for receive data */ n = recvfrom(sockfd, mesg, MAXLINE, 0, pcliaddr, &len); /* sent data back to client */ sendto(sockfd, mesg, n, 0, pcliaddr, len); } } int main(void) { int sockfd; struct sockaddr_in servaddr, cliaddr; sockfd = socket(AF_INET, SOCK_DGRAM, 0); /*

UDP基础server与client

点点圈 提交于 2020-02-18 07:55:15
1、基础功能 1、server端 import socket sk = socket.socket(type=socket.SOCK_DGRAM) # 建立一个socket对象, # 指定以UDP协议的形式来连接 sk.bind(('127.0.0.1',8080)) # 指定服务的地址 msg,addr = sk.recvfrom(1024) # msg为接收到的消息,addr为发送端的地址 print(msg,addr) sk.sendto(b'HELLO',addr) # 给发送端回复消息,需携带 发送端的地址 sk.close() # 关闭socket连接 2、clien端 import socket sk = socket.socket(type=socket.SOCK_DGRAM) sk.sendto(b'hello',('127.0.0.1',8080)) # 直接给服务器发送一段消息,需携带目的地址 msg,addr = sk.recvfrom(1024) # 接收对面的回信 print(msg) sk.close() 2、udp聊天小工具 1、客户端 import socket ph = socket.socket(type=socket.SOCK_DGRAM) ip_port = (("127.0.0.1",8089)) while 1: input_msg =

UDP编程中client和server中使用recvfrom和sendto的区别

 ̄綄美尐妖づ 提交于 2020-02-18 07:54:15
client中: sendto(sfd,buf,strlen(buf),0,(struct sockaddr *)&saddr,len); recvfrom(sfd,buf,sizeof(buf),0,NULL,NULL); server中: recvfrom(fd,buf,sizeof(buf),0,(struct sockaddr *)&caddr,&len); 将网络字节序的IP地址转换成字符串输出 // inet_ntoa : struct ip -> char *ip char *paddr = NULL; paddr = inet_ntoa(caddr.sin_addr); printf("client[%s] say:%s\n",paddr,buf); sendto(fd,buf,strlen(buf),0,(struct sockaddr *)&caddr,len); struct sockaddr_in saddr; socklen_t len = sizeof(saddr); sendto最后两个参数是(struct sockaddr *)&saddr【 saddr 是自己 新建的sockaddr_in型的变量】, len【len 是socklen_t型的变量 其值为sizeof(saddr)】在client和server的编程中相似。

Is it possible to use UDP with socket.io?

╄→гoц情女王★ 提交于 2020-02-18 06:14:04
问题 I have a game I am working on and I heard that UDP is superior for real-time games. I know that socket.io uses TCP and was wondering if there is some way to switch it to UDP. I tried looking it up but only found posts from around 2012 which said UDP is only experimental in browsers. 回答1: From a standard browser, it is not possible. From a browser client, socket.io uses either the http or the webSocket transport. Both http and webSocket are TCP connections, not UDP connections. So the browser