Transmission

16 . Go之网络编程

梦想的初衷 提交于 2020-07-28 08:37:23
互联网的本质 两台计算机之间的通信与两个人打电话原理是一样的. # 1. 首先要通过各种物理连接介质连接 # 2. 找准确对方计算机(准确到软件)的位置 # 3. 通过统一的标准(一般子协议)进行数据的转发 # 物理连接介质,这个是网络工程师所考虑的,后面也会给大家简单的讲到,咱们主要就是学习这统一的标准。 # 英语成为世界上所有人通信的统一标准,如果把计算机看成分布于世界各地的人,那么连接两台计算机之间的internet实际上就是一系列统一的标准,这些标准称之为互联网协议,互联网的本质就是一系列的协议,总称为‘互联网协议’(Internet Protocol Suite). # 互联网协议的功能:定义计算机如何接入internet,以及接入internet的计算机通信的标准。 自从互联网诞生以来,现在基本上所有的程序都是网络程序,很少有单机版的程序了. 计算机网络就是把各个计算机连接到一起,让网络中的计算机可以互相通信。网络编程就是如何在程序中实现两台计算机的通信。 举个例子,当你使用浏览器访问新浪网时,你的计算机就和新浪的某台服务器通过互联网连接起来了,然后,新浪的服务器把网页内容作为数据通过互联网传输到你的电脑上。 由于你的电脑上可能不止浏览器,还有QQ、Skype、Dropbox、邮件客户端等,不同的程序连接的别的计算机也会不同,所以,更确切地说

零基础学网络,网络小白入门须知,传输层TCP及UDP协议详解

心已入冬 提交于 2020-07-25 03:53:31
一、传输层【重点掌握TCP三次握手四次挥手】 传输层定义了主机应用程序之间端到端的连通性。传输层中最为常见的两个协议分别是 传输控制协议TCP(Transmission Control Protocol)和用户数据包协议UDP(User Datagram Protocol)。 lTCP是一种面向连接的传输层协议, 可提供可靠的传输服务。 二、TCP端口号 TCP端口号 1、端口分为知名端口和动态端口。 2、有些网络服务会使用固定的端口,这类端口称为知名端口,端口号范围为0-1023。如FTP、HTTP、Telnet、SNMP服务均使用知名端口。 3、动态端口号范围从1024到65535,这些端口号一般不固定分配给某个服务,也就是说许多服务都可以使用这些端口。只要运行的程序向系统提出访问网络的申请,那么系统就可以从这些端口号中分配一个供该程序使用。 总结:一句话, 端口号用来区分不同的网络服务。 三、TCP头部&UDP头部 TCP头部 TCP通常使用IP作为网络层协议,这时TCP数据段被封装在IP数据包内。 TCP数据段由TCP Header(头部)和TCP Data(数据)组成。TCP最多可以有60个字节的头部,如果没有Options字段, 正常的长度是20字节。 TCP Header是由如上图标识的一些字段组成,这里列出几个常用字段。 1.16位源端口号

基于visual studio 2017 以及cubemx 搭建stm32的开发环境(2)

血红的双手。 提交于 2020-05-08 02:15:15
主要解决 vs2017中,printf无法打印数据的问题。 在keil环境下正常使用printf功能,但是以下的重定向代码在vs2017下使用不了: #ifdef __GNUC__ /* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf set to 'Yes') calls __io_putchar() */ #define PUTCHAR_PROTOTYPE int __io_putchar(int ch) #else #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f) #endif /* __GNUC__ */ /* * * @brief Retargets the C library printf function to the USART. * @param None * @retval None */ PUTCHAR_PROTOTYPE { /* Place your implementation of fputc here */ /* e.g. write a character to the EVAL_COM1 and Loop until the end of transmission */ HAL_UART

TCP三次握手和四次挥手---转

无人久伴 提交于 2020-05-07 02:12:51
TCP建立连接为什么是三次握手,而不是两次或四次? TCP,名为传输控制协议,是一种可靠的传输层协议,IP协议号为6。 顺便说一句,原则上任何数据传输都无法确保绝对可靠,三次握手只是确保可靠的基本需要。 举个日常例子,打电话时我们对话如下: 对应为客户端与服务器之间的通信: 于是有了如下对话: 我:1+1等于几? 她:2,2+2等于几? 我:4 首先两个人约定协议 1.感觉网络情况不对的时候,任何一方都可以发起询问 2.任何情况下,若发起询问后5秒还没收到回复,则认为网络不通 3.网络不通的情况下等1min路由器之后再发起询问 对于我而言,发起 “1+1等于几”的询问后 1. 若5s内没有收到回复,则认为网络不通 2. 若收到回复,则我确认①我能听到她的消息 ②她能听到我的消息,然后回复她的问题的答案 对于她而言,当感觉网络情况不对的时候 1. 若没有收到我的询问,则她发起询问 2. 若收到“1+1等于几”,则她确认 ①她可以听到我的消息,然后回复我的问题的答案和她的问题“2,2+2等于几” 3. 若5s内没有收到我的回复“4”,则她确认 ②我听不见她的消息 4. 若5s内收到了我的回复“4”,则她确认 ②我可以听见她的消息 这样,如果上面的对话得以完成,就证明双方都可以确认自己可以听到对方的声音,对方也可以听到自己的声音! 这个故事可以解释TCP为什么要三次握手吗 ... 囧

Linux性能优化实战学习笔记:第四十四讲

梦想的初衷 提交于 2020-05-06 03:19:28
一、上节回顾 上一节,我们学了网络性能优化的几个思路,我先带你简单复习一下。 在优化网络的性能时,你可以结合 Linux 系统的网络协议栈和网络收发流程,然后从应用程序、套接字、传输层、网络层再到链路层等每个层次,进行逐层优化。上一期我们主要 学习了应用程序和套接字的优化思路,比如: 在应用程序中,主要优化 I/O 模型、工作模型以及应用层的网络协议; 在套接字层中,主要优化套接字的缓冲区大小。 今天,我们顺着 TCP/IP 网络模型,继续向下,看看如何从传输层、网络层以及链路层中,优化 Linux 网络性能。 二、网络性能优化-传输层 传输层最重要的是 TCP 和 UDP 协议,所以这儿的优化,其实主要就是对这两种协议的优化。 我们首先来看 TCP 协议的优化。 TCP 提供了面向连接的可靠传输服务。要优化 TCP,我们首先要掌握 TCP 协议的基本原理,比如流量控制、慢启动、拥塞避免、延迟确认以及状态流图(如下图所示)等 关于这些原理的细节,我就不再展开讲解了。如果你还没有完全掌握,建议你先学完这些基本原理后再来优化,而不是囫囵吞枣地乱抄乱试。 掌握这些原理后,你就可以在不破坏 TCP 正常工作的基础上,对它进行优化。下面,我分几类情况详细说明。 第一类 ,在请求数比较大的场景下,你可能会看到大量处于 TIME_WAIT 状态的连接,它们会占用大量内存和端口资源。这时

MQTT,CoAP,,LWM2M,UDP,TCP各自特点,NB-iot设备接入协议

给你一囗甜甜゛ 提交于 2020-05-02 17:02:09
UDP 用户数据报协议(UDP,User Datagram Protocol) 传输层协议 是无连接的,即发送数据之前不需要建立连接。 尽最大努力交付,即不保证可靠交付 传输效率高,适用于对高速传输和实时性有较高的通信或广播通信。 支持一对一,一对多,多对一和多对多的交互通信。 TCP传输控制协议(TCP,Transmission Control Protocol) 传输层协议 TCP面向连接(如打电话要先拨号建立连接)。 提供可靠的服务, 通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达。传输效率相对较低。 连接只能是点到点、一对一的 CoAP 约束应用协议(CoAP The Constrained Application Protocol)应用层协议 基于REST架构的CoAP协议。 工作在 UDP协议族 COAP是二进制格式的, HTTP是文本格式的,COAP比HTTP更加紧凑。 轻量化,COAP最小长度仅仅4B,一个HTTP的头都几十个B 支持可靠传输,数据重传,块传输。 确保数据可靠到达支持IP多播, 即可以同时向多个设备发送请求。 非长连接通信,适用于低功耗物联网场景。 MQTT 消息队列遥测传输(MQTT Message Queuing Telemetry Transport) 应用层协议 基于客户端-服务器的消息发布/订阅传输协议。 工作在 TCP

TCP协议与UDP协议

最后都变了- 提交于 2020-05-02 12:28:50
TCP(Transmission Control Protocol) 传输控制协议 1. 三次握手协议(建立连接) TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接: 位码即tcp标志位,有6种标示:SYN(synchronous建立联机) ACK(acknowledgement 确认) PSH(push传送) FIN(finish结束) RST(reset重置) URG(urgent紧急) Sequence number(顺序号码) Acknowledge number(确认号码) 第一次握手:主机A发送位码为syn=1,随机产生seq number=1234567的数据包到服务器,主机B由SYN=1知道,A要求建立联机; 第二次握手:主机B收到请求后要确认联机信息,向A发送ack number=(主机A的seq+1),syn=1,ack=1,随机产生seq=7654321的包 第三次握手:主机A收到后检查ack number是否正确,即第一次发送的seq number+1,以及位码ack是否为1,若正确,主机A会再发送ack number=(主机B的seq+1),ack=1,主机B收到后确认seq值与ack=1则连接建立成功。 完成三次握手,主机A与主机B开始传送数据。 2、四次挥手(释放连接) 第一次挥手: 主动关闭方发送一个FIN

理解 Linux 网络栈(1):Linux 网络协议栈简单总结

为君一笑 提交于 2020-05-02 08:32:28
引自:https://www.cnblogs.com/sammyliu/p/5225623.html 本系列文章总结 Linux 网络栈,包括: (1) Linux 网络协议栈总结 (2) 非虚拟化Linux环境中的网络分段卸载技术 GSO/TSO/UFO/LRO/GRO (3) QEMU/KVM + VxLAN 环境下的 Segmentation Offloading 技术(发送端) (4)QEMU/KVM + VxLAN 环境下的 Segmentation Offloading 技术(接收端) 1. Linux 网络路径 1.1 发送端 1.1.1 应用层 (1) Socket 应用层的各种网络应用程序基本上都是通过 Linux Socket 编程接口来和内核空间的网络协议栈通信的。Linux Socket 是从 BSD Socket 发展而来的,它是 Linux 操作系统的重要组成部分之一,它是网络应用程序的基础。从层次上来说,它位于应用层,是操作系统为应用程序员提供的 API,通过它,应用程序可以访问传输层协议。 socket 位于传输层协议之上,屏蔽了不同网络协议之间的差异 socket 是网络编程的入口,它提供了大量的系统调用,构成了网络程序的主体 在Linux系统中,socket 属于文件系统的一部分,网络通信可以被看作是对文件的读取

《北大毕业生拉黑父母6年:父母真的皆是祸害吗?》一文多后有感

人盡茶涼 提交于 2020-04-28 10:41:39
《北大毕业生拉黑父母6年:父母真的皆是祸害吗?》 文章出处: http://www.sohu.com/a/220166687_652831 作者:徐琼瑶 国家二级心理咨询师、国家助理社会工作师、香港中文大学社会工作硕士、浙江大学心理学和社会学双学位。 擅长领域:家庭方面(儿童及青少年,亲子关系,夫妻关系等);婚前辅导(恋爱交往,婚姻适应等);个人成长和自我探索;性小众群体的友善支援咨询。 该文是一个心理学工作者所写,我想可能是更多的从心理学的角度来思考问题吧,作为一个80后其实我和作者有很多共鸣,我们这个年龄的人其父母所生活的那个年代可能是一个社会动乱不安的时期,那时候有文革,有自然灾害,人们一直生活在压抑的生活之中,被生活所累,那时候的中国每家都是好多孩子,4、5个是正常的,7、8个也是常见的,在那个年代人们心理如果说没有问题我想是怎么也不会要人信服的,人性的黑暗在那个时期被暴露的无所适从,那个时期成长的孩子,青少年恐怕都会有一些后遗症吧,而那个时期的人们在长大以后他们的孩子也就是现在的80后们也逐渐成为了社会的中流砥柱,人们对于自己成长过程中的种种现在也在思考,更有在控诉,而他们此时此刻也正是处于在子女向父母的角色转变的过程中。 原文部分内容: 我想这个故事恐怕是这一代亲子关系之间的一个缩影 。 父母打着“爱”的旗号,掌控着子女的一切生活,企图培养他人眼中的优秀人才时

计算机网络相关协议以及(TCP,UDP区别)

会有一股神秘感。 提交于 2020-04-27 22:31:48
OSI的体系结构: 物理层->数据链路层(ARP协议 )->网络层-(OSPF开放最短路径优先协议,Ipv4/v6)>运输层->会话层(SSL安全套接字协议,TLS传输层安全协议,RPC远程过程调用协议)->表示层->应用层 ARP(地址解析协议)协议在TCP/IP模型里面,它属于网络层。 ARP协议: 数据在传输的过程中,有不断封装过程,到了链路层的话(以太网传输),在以太网的帧格式中会出现目的主机的MAC地址,但是我们从一开始就只知道目的主机的IP地址,所以这里用到了ARP协议(简单来说就是寻找对应目标的MAC地址) 源主机先在自己的ARP缓冲区中寻找映射,如果有(直接填充于以太网帧中),如果没有,通过 路由广播请求 ,这时一些联网的主机就会收到这个请求,并将这个请求传回网络层,对比IP地址,检验是否可以接受,如果不行,则直接丢失这个信息,如果可以那么回复ARP请求(回复里面包含目的主机的MAC地址,应答是单播方式),并且将源主机的MAC地址加入到目的ARP缓冲区中,形成映射,源主机接受到请求后,将目的的MAC地址加入到ARP缓冲区,也形成映射。 RARP协议: mac地址将mac地址解析为ip地址 五层协议体系结构: 应用层:(包括了上面的会话层,表示层,应用层) 应用层(application-layer)的任务是通过应用进程间的交互来完成特定网络应用