TCP/IP基础通讯知识(BP指南)
对网络通讯感到好奇?不如花时间来学习!
TCP通讯讲解教程推荐
1 耗时比较短的教程(纯代码讲解)
https://www.bilibili.com/video/BV1VC4y187vH?p=9
2 体系比较完善的教程(英文文档讲解原理+代码讲解)
https://www.bilibili.com/video/BV1TA411q75p?p=5
3 图文并茂讲解教程(示意图较多)
https://www.bilibili.com/video/BV1Br4y1h7gP?p=46&spm_id_from=pageDriver
linux系统网络基础 OSI 7层网络通讯模型数据传输的过程
1 物理层 数据链路层 网络层 传输层 会话层 表示层 应用层
每一层都会额外加上每层的头部信息信息 叫做封包 封包之后 一包数据会行程一帧数据
数据传输方式
协议组成 OSI数据传输模型 数据传输过程
2 TCP/IP协议栈模型
IP对应的是internet protocl网络协议
IP协议是TCP模型中最重要的协议 适用范围主要是网络层 为TCP UDP ICMMP协议提供数据传输的通道
数据报文的分段,当传送的数据大于MTU时 将数据进行分段发送和接收 并重新组装
socket通讯讲解
1 端口主要用于区分同一个主机上,不同应用
2 功能框图展示 套接字 对应的就是一层一层包装字符
3 TCP对应的全称是 Transmission control protocol 传输控制协议
4 服务器会被动等待客户端连接,自己不会主动发出请求
5 UDP英文全称 user datagram protocol 用户报文协议 udp不会自动回传丢失的数据包
6 udp不对数据进行检查 因此udp拥有更小的时延 占用更少的系统资源 主要应用在视频通话这种情况 或者是语音通话
7 python中with代表语法糖 当with语法结束的时候 会销毁 使用with自动定义的变量
8 代码调试中 先对服务器进行调试 之后使用上位机工具与服务器进行通讯,服务器调试完成 之后开发客户端 做客户端上基础功能测试
9 使用多线程可以处理 通信中问题 也可以使用异步IO解决通信中问题
10 HTTP协议是TCP协议的一个典型应用,也是浏览器与服务器交互的主要方式
11 200代表请求成功 404代表请求的资源不存在
12 python -m http.server 8000 对应的是python中提供的服务器
代码解读Socket通讯
1 服务端进行启动,需要设置对应端口,客户端向服务端发出请求,按照端口数据 可进行链接
初始化之后,就是持续的对数据监听
strcat实现的功能是,向指定数组中追加数据
socket通讯准备,先启动服务端 后开启客户端
2 使用同一台电脑可以进行服务端+客户端测试 定义指定端口号 之后就可以开始测试
3 使用对应的TcpClient.Write(数组名称) 就可以实现客户端上数据通信
4 实际应用中TCP通讯是超级简单的,底层都有对应封装好的库文件
5 网络通讯中,基础知识是比较重要 开始学习基础的知识
6 客户端和服务端数据交互延时很短 发送数据后 可直接接收返回的数据
7 socket通讯完成之后 使用close(socket(对象))释放内存中申请到资源
8 不同的软件有不同的端口,常见的软件端口数值偏小
9 send函数说明 send函数返回的数据要是小于0 对应的是通信链路不可用
11 服务端有两个socket 一个用于监听的socket,还有一个是accept函数创建的socket,用于与客户端通信
12 socket申请一般不会失败,除非是板子中资源耗尽
13 linux操作系统中可以吧所有的处理方式都归结为IO
14 系统默认打开的socket总数是1023个,这个数据是可以进行手动修改
15 端口使用重叠,IP设置超出8字节限制,以及ip没有正确设置 都会造成设备连接出现异常
16 listen函数一般不会返回错误,实际使用中需要加上返回参数判断
17 accept函数使用中会产生阻塞的效果 连接异常之后 就会被阻塞
18 要是有云服务器,就可以运行程序到云服务器上,之后各种设备作为客户端,跟服务器进行数据交互,可完成完整的linux闭环通信
19 使用send函数进行大数量字节发送,需要调用多次send函数进行数据发送,否则很有可能导致 开始发送的数据不完整
20 发送数据,返回值是发送的数据长度
21 send函数 使用中要是网络已经断开连接 函数也不会直接发生报错,对应就是软件容错率会比较高
22 linux中调试代码 可以使用gdb工具进行,使用指令就可以进行单步调试 ,后续需要进行研究
23 recieve函数中要是出现异常,第一次程序运行不会出现报错提示,后续运行会出现管道破裂的错误提示
24 对于通讯学习,可以自己使用代码进行测试,修改部分参数 之后进行验证
25 函数小结
服务端以及客户端 实际上都是相对的
通讯的方式根据业务的需求 可以进行自定义设置
26 基础代码学习完成 查找异核通讯相关的使用技巧
27 gdb进行代码调试,技巧需要完全掌握
28 函数只是socket通信中入门的第一步,后续通信管控 才是难点
29 windows上socket通讯跟linux上通信不同
30 c语言实现Socket简单通信
31 代码混乱时,需要对代码中必须得部分进行分离,最终形成代码封装
32 gethostbyname linux中对数字以及字符串转化 或者是判断 关键字 需要进行认识
34 视频中有讲解到线程使用 ,需要进行学习,因为虚拟串口上数据交互的方式,不支持中断的形式,只能借助外界的资源进行数据操作
https://www.bilibili.com/video/BV1tp4y1i7rL?p=98
TCP协议概述
1 停留在运维的状态,学习到前边的网络模型之后 就已经足够自身使用
2 IP数据报文(不做掌握 只做了解)
4 ICMP报文(网络控制报文协议)
总共是32字节
icm报文格式 用来传递差错信息,时间,回显,网络信息等报文控制数据
5 TCP协议是针对IP协议增加了部分功能 ,功能有 确认重发 滑动窗口 以及复用等机制
6 通常说的协议 一般是两个协议 一个是ip协议 一个是tcp协议
7 TCP提供了稳定的 安全的,面向连接的字节流服务
8 使用tcp协议 进行数据传输时应用程序之间传输数据时 可以视为无结构字节流
9 基于字节流的服务没有字节序问题的困扰 (传输协议可自己解决数据传输的问题?)
面向连接的服务:在数据传输之前TCP协议需要先建立连接
之后的报文在此基础上进行数据传输
10 TCP协议面向连接的单薄协议,对应三种方式,单播,组播,广播
单播:在数据发送和接收钱 通信双方必须在彼此之间建立一条连接 一对一的通讯,有来言,有去语
广播:一对多的服务 通常用在交换机或者是其他应用
11 建立连接的时候 使用三次握手 断开连接的时候 使用四次挥手 断开一个连接
12 tcp输出数据三个阶段:建立连接 数据传输 断开连接
13 对于知识点以及知识面 最好是使用思维导图的形式进行学习或者是进行整理,容易行程思维宫殿
14 需要对前置的信息 进行充分的理解之后 (背)之后对细节进行学习 前置信息基本都是面试题目
虚拟文件系统
1 ll指令 按照列表的形式,进行文件列出
2 df查看设备MMC使用情况
3 df -h 对应的是按照时间格式进行文件排列
4 boot中文件是进行挂载运行的,可以对文件进行卸载以及挂载操作
5 硬连接 对应磁盘中指向是同一个文件 软连接 对应
TCP/IP模型(ip协议对应的是网络之间互联的协议)
1 网络模型有两种方式,一种是五层,一种是四层,五层后三层(应用层,表示层,会话层)集中到一起
四层的情况下 在前边的处理方式下 还有将 第一层第二层进行合并(物理层,数据链路层)统称为网络接口层
3 在senos7上可以使用yum install -y net -tools指令进行安装包安装
7 路由器 以及交换机中对于IP的处理方式是不同的 交换机不能对设备进行IP分配 路由器可以对设备进行ip分配
9 ip协议对应的是网络之间互联的协议 互联网包括物联网所有计算机网络通讯的一套规则
10 IOT等设备也需要遵守规则
11 规定了计算机在网络中进行通信时应当遵守的规则
13 查看网关信息,表示方法有两种一种是0.1.另外一种是0.254.查看网关信息要是查询不通 需要变通