网络编程:通过代码完成基于网络的跨主机通信
跨主机通信方式:
1.TCP/IP网络
2.蓝牙通信
3.近场通信NFC
4.毫米波通信:功率高,带宽高,抗干扰能力差
其中TCP/IP网络是日常编程中最常涉及到的,最通用的跨主机通信的方式
一些概念
客户端 VS 服务器
客户端:在网络中主动发起通信的一方
服务器:被动接受的一方
客户端和服务器之间的交互
客户端给服务器发送的数据,称为请求(request)
服务器返回给客户端的数据,称为响应(response)
1.一问一答
一个请求对应一个响应,进行web开发就是这种模式
2.一问多答
一个请求对应多个响应,涉及到下载的场景
3.多问一答
多个请求对应一个响应,涉及到上传的场景
4.多问多答
多个请求对应多个响应,涉及到远程控制的场景
TCP VS UDP
进行网络编程需要使用系统的API,本质上是由传输层提供的
涉及到TCP和UDP两个协议,两个协议差异很大
TCP特点:有连接;可靠传输;面向字节流;全双工
UDP特点:无连接;不可靠传输;面向数据报;全双工
连接
有连接:指抽象且虚拟的连接。连接的特点是双方都能认同,例如打电话就是有连接的通信方式
无连接:例如发微信/短信,无论你是否同意,我都能给你发过去
网络中的连接:通信双方有一些数据结构能各自保存对方的相关信息
传输可靠性
前提:无论使用什么技术,都无法100%保证网络数据能从A传到B
可靠传输:尽可能完成数据传输,无法确保对方是否收到,但发送方可以知道对方是否收到了
不可靠传输:就是不知道对方是否收到数据咯
面向字节流/数据报
面向字节流:和文件的字节流一致,网络中传输的数据基本单位是字节
面向数据报:传输的基本单位是一个数据报(由一系列字节构成的特定的结构)
全双工
全双工:一个信道可以双向通信(类似日常见到的马路)
半双工:只能单向通信