网络基础and网络编程套接字(如何实现网络编程)

第一部分:网路基础

一、网络发展背景——网络编程的前景提要
1.网络通信协议(这种协议就是一种约定):通信双方对网络通信数据洗脑的统一格式(解析式)
2.协议分层
优点:将提供的服务以及协议接口进行封装以后,使用起来更加方便,替换起来更加便捷,实现起来也更加清晰明了。
OSI七层参考模型:
按照网络通信中的协议,接口服务对网络通信进行的协议分层;
应用层——表示层——绘画层——传输层——网络层——数据链路层——物理层
3.(重要)TCP/IP五层模型
TCP/IP是一组协议(协议簇),其中最典型的协议就是TCP、IP所以命名为TCP/IP。
应用层:负责应用程序之间的沟通;其中最典型的协议:http、ftp
传输层:负责端与端之间的数据传输;其中最典型的协议:tcp、udp
网络层:负责地址管理与路由选择;其中最典型的协议是:IP、最典型的设备是:路由器(负责选址)
链接层:负责相邻设备之间的数据帧传输;其中最典型的是协议是:以太网协议(eth)、最典型的设备是:交换机(负责数据转发)
物理层:负责光电信号传输;其中最典型的协议是:以太网协议、最典型的设备是:集线器
4.网络通信流程
在这里插入图片描述

第二部分:网络编程套接字
一、套接字编程(socket编程)
1.ip地址(IPV4)
(1)功能:唯一标识网络上的主机
(2)数据:无符号4个字节的整数
(3)源ip地址——>目标ip地址
(4)数据:共42亿(不够用)
在这里插入图片描述
现在已经有了IPV6,但是我们并没有使用,还是使用IPV4,因为IPV6对于不向下兼容IPV4.
2.port端口
凭什么qq发送的消息是qq处理而不是微信?
(1)用于唯一标识主机上处理数据的进程
(2)数据类型:无符号2个字节的整数uint16_t 65535
(3)五元组:源ip、源端口、目的ip、目的端口、协议(sip,sport,dip,dport,proto)——>用于标识一条通信
3.网络字节序
(1)概念:
字节序:用于CPU对数据进行存取的顺序——存储大小大于一个字节的数据。
大端字节序:低地址存放高位
小端字节序:低地址存放低位
(2)字节序取决于CPU的架构
internet的CPU是X86架构——小端字节序
另外的CPU是MIPS架构——大端字节序
(3)通信双方无法确定对方电脑的字节序时,发送大于一个字节存储的数据就有可能造成数据错误。
解决办法:不管是大端还是小端,反正网络通信的时候统一采用网络字节序标准(大端字节序)进行通信。
注意1:我们的字节序是针对那些字节数大于2的数据类型。
注意2:主机字节序取决于CPU的架构,需要我们进行判断
【面试】当面试的时候人家问你的项目用的是什么字节序?如何判断大小端?大小端的区别?
答:(1)首先对于字节序:回答用的是网络字节序(因为一致性);
(2)大小端的判断:代码查看大小端——通过地址的查询来判断
unsigned short a=0x1234;
char *p=&a;
printf("%c\n",p);//如果是0x12则是小端,是0x34则是大端
(3)大小端的区别:大端是低地址存放在高位;而小端是低地址存放在地位。
二、套接编程
网络通信的时候,链路层—eth、网络层—ip、传输层—tcp/udp
1.初步认识
两台主机之间进行网络通信——必定有一方是主动方。
主动方(客户端)——(请求)——>服务端(被动方)
【面试】传输层到底该选tcp还是udp(实际上就是问它们的区别)?
首先我们来看看tcp和udp各自的特点:
(1)tcp(传输控制协议):有连接、可靠传输、面向字节流
*具体的解释:有连接就表示双方是否都在;可靠传输表示在网络正常下确保数据可以安全到达对方;保证数据的安全性、传输灵活、但是传输速率比较低并且会有数据粘包的问题;
(2)udp(用户数据报协议):无连接、不可靠、面向数据报(它表示传输的数据都是一整条整条的,对方接收解析数据的时候也是整条整条的,它直到那个地方是开始的地方,那个地方是结束的地方)
*具体的解释:无连接就像发短信,并不保证数据到达对方,但是速率快不会有粘包问题。
所以最后对于tcp和udp我们根据情况的不同选择的协议也就不同:
在对于数据安全性的要求比较高的时候我们就选择:tcp协议
对于数据的传输速率要求高的时候我们就选择:udp协议
2.基于udp协议实现网络通信(udp编程)

在这里插入图片描述
3.基于tcp协议
在这里插入图片描述
tcp的服务端会为每一个客户端都建立一个新的socket。用这个新的socket专门用于跟客户进行通信。
一开始创建的socket,可以姐搜狐所有客户端的连接请求,一旦与客户连接建立成功,操作系统会为客户建立单独的socket进行数据通信。一开始的socket称之为:监听socket(仅用于建立连接)–>就相当于是迎宾员。后面为每个客户端创建的socket数据传输的socket(专门用于数据传输)–>就相当于是进店们以后的服务员。

猜你喜欢

转载自blog.csdn.net/ZhuiZhuDream5/article/details/88257808
今日推荐