C#通讯之网络通讯 TCP UDP
网络协议:
(七层网络框架,TCP协议,UDP协议,工业行业协议等)
网络通讯七层框架: https://www.zhihu.com/question/50901704/answer/1355350632 https://blog.csdn.net/weixin_42727710/article/details/127744329 https://blog.csdn.net/m0_73895181/article/details/130335322 https://zhuanlan.zhihu.com/p/582564362
通讯协议: HTTP协议: https://baike.baidu.com/item/HTTP
HTTPS是一种应用层的通信协议,超文本传输协议.全程:Hypertext
Transfer Protocol Secure
超文本:纯文本(数字,英文,汉字),富文本(图片,音频,视频等)
RS232协议: https://zhuanlan.zhihu.com/p/103164045 https://baike.baidu.com/item/RS-232/2022036
RS442协议: https://baike.baidu.com/item/RS-422
RJ45协议:网口 https://baike.baidu.com/item/RJ45
什么是OSI?
OSI(OPen System Interconnect)即开放式系统互联.一般都叫OSI参考模型,是ISO(国际标准化组织)组织在1985年研究的网络互联模型,该体系结构标准定义了网络互连的七层架构.
网络七层模型
网络互联的七层框架?
网络互联的七层架构,又称OSI开放系统互联参考模型
分为七层:物理层,数据链路层,网络层,传输层,会话层,表示层,应用层
遵守网络互连的两端在传输数据时,通过七层架构,层层按顺序传递的
网络上两端是如何互连的?
假如网络有两端,一端称为服务器Server,一端称为客户端Client
[服务器] 向 [客户端] 发送数据,[客户端] 接收 [服务器] 传递的数据
它们的过程如下:
[服务器] 把数据通过七层架构一层一层向下传递:
从 应用层(可以直接用的APP)-->表示层-->会话层-->传输层-->网络层-->数据链路层-->物理层
当 [服务器] 把数据传递给它的物理层后,由于 [服务端] 的物理层和 [客户端] 的物理层是通过物理设备连接的,可以直接通讯. [服务器] 的物理层通过比特流的方式把数据传递到【客户端】的物理层。
[客户端]物理层接收到数据后,并一层一层的向上传递;
从物理层-->数据链路层-->网络层-->传输层-->会话层-->表示层-->应用层
[客户端] 把数据传递到它的应用层后,就可以在应用程序中使用了
七层架构中,每一层的主要功能及常用的通讯协议?
应用层:负责应用程序的运行,常见的协议有 [HTTP],[HTTPS],[TeInet],[FTP],[SMTP],[DNS]等
表示层:负责数据格式转换.常见的协议有[ASCII,UTF8,Unicode],SSL/TLS,JPEG,GIF,DES,MPEG,LPP等
会话层:负责建立和断开通信连接,常见的协议有ADSP,RPC,SQL等
传输层:负责可靠安全的进行数据传输,常见的协议有[TCP],[UDP],SPX等
网络层:负责将数据传输到目标地址,常见的协议有[IP],ICMP/ICMPv6,IGMP,IPX,ARP,RARP等
数据链路层:负责物理层面上互连的节点之间的通讯传输,常见的协议有HDLC,PPP,SLIP,ATM,IEEE802.2/.3,VLAN,STP,WIFI(IEEE 802.11)等
物理层(硬件):负责比特流(0,1序列)与电压高低,光的闪灭之间的互换,常见的协议UART、RS232/232C、RS422/423/449/485、RJ-45、V24、V35、FDDI、X.21、X.21bis等。
MIME:
https://baike.baidu.com/item/MIME/2900607
必须要掌握的协议有?了解的协议有?
要掌握:IP,TCP,UDP,HTTP/HTTPS
、FTP、RS232/RS485、Modbus,S7NETPlus 了解的:Telnet、SMTP、ARP、RARP、ASCII、RS449/422/423、RJ-45、DNS
提示: RS232、RS422/423/449/485是串口通讯接口。串口通信协议有UART、RS232、RS422、RS423、RS449、RS485等。 RJ-45是网口通讯接口。RJ-45接口网卡是最为常见的一种网卡,也是应用最广的一种接口类型网卡。
对于我们学科TCP、UDP是重中之重。串口也要有一定的接触。
简单概述要掌握的协议:
IP(Internet Protocol)网络之间互连的协议,包括:IPv4/IPv6。寻址的协议。提醒:IP在网络层。 v version版本
TCP(Transfer Control Protocol)传输控制协议提供可靠的面向连接的服务,传输数据前须先建立连接,结束后释放。可靠的全双工信道。可靠、有序、无丢失、不重复。不易造成数据丢失,不易读脏数据。提醒:属于传输层,而非网络层。 类似“保安,保镖”,武功高。
UDP(User Datagram Protocol)用户数据报协议,发送数据前无需建立连接,不使用拥塞控制,不保证可靠交付,最大努力交付。容易造成数据丢失。易读取到脏数据。
FTP(File Transfer Protocol)文件传输协议,默认端口号为21。
HTTP(Hypertext Transfer Protocol)超文本传输协议,默认端口号为80。Hypertext超文本范围比较大,包含:音频,视频,图像,文本等
HTTPS(Hypertext Transfer Protocol Secure)安全的超文本传输协议,默认的端口号是443。是以安全为目标的 HTTP 通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性。HTTPS 在HTTP 的基础下加入SSL,HTTPS 的安全基础是 SSL。
SSL:https://baike.baidu.com/item/SSL%E8%AF%81%E4%B9%A6/5201468?fr=aladdin
RS-232标准接口(又称EIA RS-232)是常用的串行通信接口标准之一,它是由美国电子工业协会(Electronic Industry Association,EIA)联合贝尔系统公司、调制解调器厂家及计算机终端生产厂家于1970年共同制定,其全名是“数据终端设备( DTE)和数据通信设备(DCE)之间串行二进制数据交换接口技术标准”。
TCP
TCP协议: https://blog.csdn.net/qq_57212959/article/details/130753389 https://blog.csdn.net/weixin_44899642/article/details/129749935 https://baijiahao.baidu.com/s?id=1709872840052170461 https://baijiahao.baidu.com/s?id=1708621911214426696 https://zhuanlan.zhihu.com/p/471415273 https://www.cnblogs.com/seabluescn/p/12972632.html
Socket通讯: https://blog.csdn.net/qq_57212959/article/details/130753389 https://zhuanlan.zhihu.com/p/584948966 https://blog.csdn.net/qq_44732054/article/details/127370768 https://blog.csdn.net/zhuweisky/article/details/42744335
什么TCP?
TCP(Transmission Control Protocol)传输控制协议。它是七层框架中的【传输层】中的协议。是TCP/IP协议簇中的一个重要协议。 TCP是一种【面向连接的】、【可靠的】、基于【字节流】的【传输层通信协议】
TCP/IP协议簇:组,此组上包含传输层和网络层上的协议。 TCP/IP协议簇是Internet的基础,也是当今最流行的组网形式。TCP/IP是一组协议的代名词,包括许多别的协议,组成了TCP/IP协议簇。 其中比较重要的有IP协议、TCP协议、UDP协议、FTP协议、DNS协议、SMTP协议等。
TCP特点?
TCP具有【有序的】,【安全的】,【可靠的】,【不容易丢包】,【延时性高】等特点
TCP主要应用场景?
主要用于聊天,数据传输。
什么是Socket? 它和TCP,UDP的关系?
Socket即套接字,其实就是一个“外壳”,是对网络中不同主机上的应用程序之间进行双向通信的断点的抽象,一个套接字就是网络上进程通信的一段,提供了应用层进程利用网络协议交换数据的机制。
概括:Socket是套接字,本质它是对TCP和UDP做一层封装。让开发者在使用TCP和UDP等协议时,不用关注协议底层原理,使用时更方便。 实质就是,Socket就是【应用层与TCP/IP协议簇通信的中间软件抽象层】。将传输层封装后便与应用层更方便的调用。
C#有Socket类,可以实现TCP和UDP通讯。但.NET Framework框架通过TcpListener类、TcpClient、UdpClient类、这几个类对Socket进行了封装。所以建议使用具体的类。
TCP建立连接的三次握手?四次挥手?(面试重点。)
总结概括一下: 第一次握手:客户端向服务器发起连接请求。请求建立连接。为了请求 SYN=1和seq=100 第二次握手:服务端收到客户端发过来的请求后,响应给客户端一个结果(回复一段报文)。为了确认 SYN=1, ACK=1, seq=300, ack=101 这次服务器告诉客户端我收到你的请求了。 第三次握手:客户端收到服务器端响应后,在响应的数据后,再向服务器发一段报文。为了确认 ACK=1,seq=101,ack=301,这次客户端告诉服务器我收到你的响应了。
三次握手之后,客户端和服务器之间可以通讯。通讯结束后,进行四次挥手。
三次握手:换句话说,让客户端和服务器能通讯之前,双方建立一个信任通道,通过三次握手建立的。 三次握手即客户端和服务器双方发送了三次数据报文。其中客户端发两次,服务器响应一次。
第一次挥手:客户端数据传输完成后,向服务器发送一段FIN报文(连接释放报文)。 第二次挥手:服务端收到客户端发的FIN报文后给客户端回复确认报文。 第三次挥手:服务端将最后数据发送完毕后,就向客户端发出FIN报文(连接释放报文)。 第四次挥手:客户端收到服务端发的FIN报文后,向服务端发出确认报文。
三次握手的目的是建立一个连接。 四次挥手的目的是关闭一个连接。
SYN是一个标识,标识客户端想干啥?想连接SYN=1,想请求数据SYN=2,想释放连接SYN=3
ACK是一个标识,标识服务器是否已经收到客户端的请求报文?ACK=1且ack=客户端seq+1表示服务器已收到客户端请求报文 在服务器响应的报文中,如果带有客户端发送的SYN=1,表示服务器允许客户端请求。
详情请看: https://baijiahao.baidu.com/s?id=1709872840052170461 https://baijiahao.baidu.com/s?id=1708621911214426696
延申问题:TCP为什么在三次握手?两次握手不行吗? 因为需要考虑连接时丢包的问题,如果没有第三次握手,客户端一直没得到服务器端的回应。客户端就不会再次请求服务器。
TCP连接三个阶段?
一个TCP连接通常分为三个阶段:连接(三次握手)、数据传输、退出(四次挥手,即关闭,释放)
TCP连接组成部分?
一个TCP连接由一个4元组构成,分别是两个IP地址和两个端口号。
服务器的身份:IP地址和端口 客户端的身份:IP地址和端口
TCP报文的头部结构? 数据格式(消息格式)
https://zhuanlan.zhihu.com/p/471415273
TCP报文有32字节。其中20个字节的固定首部。
源端口和目的端口:各占2个字节,这两个值加上IP首部中的源端IP地址和目的端IP地址唯一确定一个TCP连接。有时一个IP地址和一个端口号也称为socket(插口)。
序号(seq):占4个字节,是本报文段所发送的数据项目组第一个字节的序号。在TCP传送的数据流中,每一个字节都有一个序号。 例如,一报文段的序号为300,而且数据共100字节,则下一个报文段的序号就是400;序号是32bit的无符号数,序号到达2^32-1后从0开始。
确认序号(ack):占4字节,是期望收到对方下次发送的数据的第一个字节的序号,也就是期望收到的下一个报文段的首部中的序号;确认序号应该是上次已成功收到数据字节序号+1。只有ACK标志为1时,确认序号才有效。
数据偏移:占4比特,表示数据开始的地方离TCP段的起始处有多远。实际上就是TCP段首部的长度。由于首部长度不固定,因此数据偏移字段是必要的。数据偏移以32位为长度单位,也就是4个字节,因此TCP首部的最大长度是60个字节。即偏移最大为15个长度单位=1532位=154字节。
保留:6比特,供以后应用,现在置为0。
6个标志位比特包括:
-
ACK:只有当ACK=1时,确认序号字段才有效;
-
PSH:当PSH=1时,接收方应该尽快将本报文段立即传送给其应用层。
-
RST:当RST=1时,表示出现连接错误,必须释放连接,然后再重建传输连接。复位比特还用来拒绝一个不法的报文段或拒绝打开一个连接;
-
SYN:SYN=1,ACK=0时表示请求建立一个连接,携带SYN标志的TCP报文段为同步报文段;
-
FIN:发端完成发送任务。
窗口:
TCP通过滑动窗口的概念来进行流量控制。设想在发送端发送数据的速度很快而接收端接收速度却很慢的情况下,为了保证数据不丢失,显然需要进行流量控制, 协调好 通信双方的工作节奏。所谓滑动窗口,可以理解成接收端所能提供的缓冲区大小。TCP利用一个滑动的窗口来告诉发送端对它所发送的数据能提供多大的缓 冲区。窗口大小为 字节数起始于确认序号字段指明的值(这个值是接收端正期望接收的字节)。窗口大小是一个16bit字段,因而窗口大小最大为65535字节。
检验和:
检验和覆盖了整个TCP报文段:TCP首部和数据。这是一个强制性的字段,一定是由发端计算和存储,并由收端进行验证。
UDP
UDP通讯: https://www.cnblogs.com/seabluescn/p/12972417.html https://blog.csdn.net/u012563853/article/details/126307114
UDP异步发送: https://blog.csdn.net/zhukangle/article/details/72865560
并行编程: https://zhuanlan.zhihu.com/p/448093864
协议概念简述?
TCP:Transmission Control Protocol传输控制协议,是一种面向连接的、可靠的、基于字节流的传输层通信协议。 UDP:User Datagram Protocol用户数据报协议,是一种无连接、不可靠、面向数据报的传输层通信协议。 Socket:套接字,是【应用层与TCP/IP协议簇通信的中间软件抽象层】。将传输层封装后便与应用层更方便的调用。
TCP与UDP基本区别?
-
TCP基于连接,UDP无连接。
-
TCP要求系统资源较多,UDP较少。
-
UDP程序结构较简单。
-
流模式(TCP)与数据报模式(UDP)。
-
TCP保证数据正确性,UDP可能丢包。
-
TCP保证数据顺序,UDP不保证。
UDP通讯过程?
-
创建一端。使用UdpClient,特别提醒:使用IPEndPoint类
-
发送数据到另一端。使用udpClient.Send()
-
启动另外一端。使用UdpClient
-
在另外一端接收数据,Task.run(), udpClient.Receive()
总结:
1.网络协议理论:(七层网络框架,TCP协议,UDP协议,工业行业协议等) 2.网络协议重要理论:(TCP建立连接时三次握手,TCP释放连接时的四次挥手,TCP与UDP基本区别等) 3.各种网络通讯技术点:(Socket通讯、TCP通讯、UDP通讯)
TCP和UDP是协议,而Socket是一种技术框架。
Socket 客户端 可以发送也可以接收 发送和接收都是使用 客户端实例
Socket 服务器 可以发送也可以接收 但是接收和发送并不是他"自身"做的,而是获取到连接他的某个客户端实例,让这个客户端实例去帮助服务器发送和接收数据