计算机网络续
一. 网络编程
网络编程, 指网络上的主机, 通过不同的进程, 以编程的方式实现网络通信(或网络数据传输).
即便是同一个主机, 只要不同进程, 基于网络来传输数据, 也属于网络编程.
二. 网络编程套接字(socket)
socket: 操作系统提供的网络编程的 API 称作 “socket api”.
socket 原译: 插槽, 最初指的是主板上特定的插槽.
1. socket api
- 流式套接字
给 TCP 使用 (TCP: 有连接, 可靠传输, 面向字节流, 全双工); - 数据报套接字
给 UDP 使用 (UDP: 无连接, 不可靠传输, 面向数据报, 全双工);
由于两个协议差异大, 所以搞两套 api 分别表示.
- Unix 域套接字
不能跨主机通信, 是本地主机进程与进程之间的通信方式.(现在很少用);
2. TCP/UDP协议特点
( 1. 有链接和无连接
- 有连接, 相当于电话打通了, 才能说话.
通信双方保存对方信息 - 无连接, 相当于发微信, 不需要接通就可以发信息.
通信双方不保存对方信息
计算机中的连接是 各自保存对方的信息, 此时就认为建立了一个 “抽象的连接”
( 2. 可靠传输和不可靠传输
可靠 != 安全
- 安全: 传输的数据是否易被黑客捕获, 造成严重影响。
- 可靠: 要传输的数据, 尽可能 的传输给对方。
- 为什么说 尽可能:因为网络环境太复杂了,A 传输给 B 中间会经历许多的交换机和路由器转发,若某个交换机 / 和路由器异常繁忙,要处理的数据量已经超出自身的硬件水平,此时就可能会出现 丢包 情况的发生。(所以 丢包 的发生和位置无法预知。为对抗丢包,就引入了TCP可靠性传输,但不能达到100%避免)
( 3. 面向字节流和面向数据报
- 字节流:比喻成流水一样,读写非常灵活,文件操作就是 字节流。
TCP 和 文件操作具有相同的特点 - 数据报: 数据报是传输数据的基本单位, 是一个个的 UDP 数据报
网络传输数据的基本单位术语(0 和 1 的二进制数串)
( 1. 数据报 Datagram;UDP
( 2. 数据段 Segment;TCP
( 3.数据包 Packet;IP
( 4. 数据帧 Frame;数据链路层
无需刻意区分
( 4. 全双工和半双工
全双工:一条链路双向通信(TCP和UDP都是全双工,则既可以写也可以读)
半双工:一条链路单向通信
网线中的几根线,有些线负责信息是发送,有些线负责信息接收
3. UDP的 socket api
( 1. DatagramSocket
系统中本就有 socket 的概念,DtatagramSocket 就是对于操作系统的概念的封装
系统中的 socket 则可以理解成是一种 文件,而 文件 是一种广义的的概念,socket 文件,就可以视为是 “网卡” 的抽象表现。针对 socket 文件的读写操作,就相当于针对 网卡 这个硬件设备进行读写。
这样就可以很方便的操作硬盘,似遥控器远程操控一样,像这种具有 “遥控属性” 的这样概念,计算机中将其命名为 “句柄” (handle – 把手)
(2. DatagramPacket
针对 UDP 数据报 的一个抽象表示,一个 DatagramPacket 对象,就相当于一个 UDP 数据报。
一次发送 /一次接收,就是传输了一个 DatagramPacket 对象。
未完待续…