网络编程:tcp/ip协议详解 图解http
网络基础1 网络发展背景—网络编程的前情提要
网络通信协议:通信双方对通络通信数据信号的解析式
协议分层:
优点:将提供的服务,以及协议接口进行封装后,使用起来比较方便,替换起来更加清晰简单
OSI七层参考模型:(参考)
按照网络通信中的协议,接口,服务对网络通信进行分层
TCP/IP五层模型(来自于OSI七层模型)
Tcp/IP是一组协议成为TCP/IP协议簇,最经典的两个TCP IP
应用层:负责应用程序间的**沟通**;http网页间传输 ftp文件协议
传输层:负责端与端之间的数据**传输**;tcp/udp;
网络层:负责地址管理与路由选择;(路径选择) IP;路由器;
链路层:负责相邻设备之间的**数据帧**传输;(网络层)以太网协议(eth);交换机;
物理层:负责光电信号的传输;(物理层)以太网协议(网线粗细等问题);集线器;
通信流程:
网络编程套接字
套接字编程(socket编程)
IP地址:IPV4
功能:网络主机的唯一标识
数据:无符号4个字节的整数 uint_32_t
源ip地址->目的ip地址
数量:43亿~不够用
1.仅为正在上网者分配---dhcp(ip自动分配)
2.ip地址替换技术---NAT
ip地址:IPV6 (16个字节)
ipv6并不向下兼容IPV4--------造成其流行不起来
port端口:
数据类型:无符号2字节的整数 uint16_t 65535
用于唯一标识主机上处理数据的进程
源ip,源端口,目的ip,目的端口,协议(sig sport dip dport proto)五元组--标识一条通信
网络字节序:
字节序:cpu对数据进行存取的顺序---存储大小大于1个字节的数据
大端字节序:低地址存高位 a[4] 01 02 03 04
小端字节序:低地址存低位 a[4] 04 03 02 01
0x 01 02 03 04
【x86架构----小端】
【MIPS架构----大端】
通信双方无法确定对方电脑的字节序的时候,发送大于一个字节存储的数据就有可能造成数据错误
解决方法:不管主机是大端还是小端,反正网络通信时候统一使用大端字节序进行通信
数据类型:short int long float double
网络字节序标准就是大端字节序
主机字节序:当前主机字节序-不一定是大端/小端,取决于cpu架构,需进行判断;
套接字编程:
网络通信的时候,链路层---eth,网络层--ip,传输层-tcp/udp,应用层
传输层到底应该选择tcp还是udp好?分析利弊,视场景而定;
tcp(传输控制协议)---有连接,可靠传输,面向字节流
有连接:双方在线
可靠传输:网络状况良好
确保数据能够到达对端----保证数据的安全传输,传输灵活,传输速率低,粘包问题
udp(用户数据报协议)---无连接,不可靠,面向数据包
无法保证数据的安全传输----传输速度快,传输不够灵活,无粘包问题
对数据安全性要求高的程序用tcp---典型场景----文件传输
对数据的实时性要求比较高的程序用udp---典型场景:视频通话
两台主机直接进行网络通信---必定有一方是主动方
客户端(主动方)-----请求----> 服务端(被动方)
socket接口:
操作系统提供的一套网络编程接口
一个端口只能被一个进程使用,但一个进程可以使用多个端口
基于udp协议实现网络通信:
客户端 ----》 服务器
1.创建套接字(建立与网卡的关联) 1.创建套接字
/*2.为套接字绑定地址信息 2.为套接字绑定地址信息
对于客户端来说,不推荐手动绑定*/
-----------可以没有的操作!!!
3.发送数据 3.接受数据
4.接受数据 4.发送数据
5.关闭套接字 5.关闭套接字
1.socket()
2.bind()
3.sendto()
4.recvfrom()
5.close()
编写可参考基于udp协议实现网络通信:https://blog.youkuaiyun.com/quchen528/article/details/90059136
基于tcp协议的网络程序编程:
服务端 《---- 客户端
1.创建套接字 1.创建套接字
2.为套接字绑定地址信息 2.
3.开始监听 3.向服务器发起连接请求
4.获取连接成功的客户端socket描述符 4.接收/发送数据
5.通过新的socket接收/发送数据 5.关闭socket
6.关闭socket
tcp的服务端会为每一个客户端都建立一个新的socket,用这个新的socket专门用于跟客户端进行通信
一开始创建的socket,可以接收所有客户端的连接请求,一旦与客户端连接建立成功,操作系统会为客户端建立单独的socket进行数据通信
一开始的socket称之为:监听socket(仅用于建立连接)
后边为每一个客户端创建的socket称之为:数据传输socket(专门用于数据传输)
监听socket与数据传输socket的区别,就如等待客服和专属客服正在服务的区别