网络编程就是,写一个程序让两个计算机联网进行数据交互
Socket套接字,实现计算机之间相互通信
协议就是一种规范,使用某个协议就是遵守某种定义好的规范
网络通信确认身份三要素,IP地址,MAC地址,端口号
真正唯一标识一台计算机的是MAC地址
一.
TCP/IP协议下的Socket: 应用:http协议下的浏览器html页面
面向连接的
数据在传输过程中不会消失
数据是按顺序传输的
数据发送和接收不是同步的
二.
UTD协议下的Socket: 应用:语音,视频等传输
面向无连接
传输的数据可能丢失或损毁
重于快速传输而非顺序传输
发送和接收是同步的
限制传输数据大小
三.
OSI七层模型: TCP/IP模型
应用层 应用程序 应用层 ----HTTP协议 FTP协议
表示层 Socket 传输层 ----TCP协议 UDP协议
会话层 路由器 网络层 ----IP协议,地址解析协议
传输层 交换机 链路层
网络层
数据链路层
物理层
四.
IP地址分为IPV4 IPV6 目前大部分还是IPV4
由于IP地址资源比较珍贵,一个局域网可以拥有一个独立IP,做不到一台计算机一个。
数据包中自带IP地址信息,把数据包发送给路由器后,路由器利用算法根据IP地址找到对方计算机,完成传输。
五.
MAC地址:媒体访问控制地址
也称局域网地址,以太网地址,物理地址
每个MAC地址都是独一无二的,在计算机出厂时就写在网卡上
数据包中携带IP地址和MAC地址,发送到路由器/交换机后 可以找到对应的计算机,完成数据传递。
六.
Port端口号:计算机会给每个应用程序分配一个端口号
数据包发送到计算机后,根据不同的端口号,发送到不同应用上。
七.
Socket缓冲区:每个Socket被创建会分配两个缓冲区,输入缓冲区和输出缓冲区
要输出的数据会先存入输出缓冲区,再由TCP协议自行发送出去
输入来的数据也会先存入输入缓冲区,再读取
八.
阻塞模式
发送时候:
1.write出数据之前会先查看缓冲区,当缓冲区剩余大小小于要发送数据会进入阻塞,等缓冲区数据发送出去 腾出足够空间,再write进缓冲区
2.当缓冲区数据向网络发送时候 会进入阻塞,不能再写入知道缓冲区发送完毕。
3.如果要写入的数据要大于缓冲区最大长度,则分批写入。
读入时候:
- read如数据时候,如果缓冲区为空则进入阻塞直到有数据发送来
- 如果不能一次性把缓冲区数据读完,剩余数据会在缓冲区继续积压,等待下次read。
九.
粘包问题:当发送端多次发送的数据包,被接收端当作一次的数据包接收,无法判断边界,只能当连续的数据流接收。
十.
建立连接三次握手:
Seq为每次发送的数据包的用来标识的序号 Ack为另一端确认后再Seq基础上+1
当每次 Ack = Seq + 1成立 说明对方已经确认了收到自己的数据包
第一次握手。客户端发送请求给服务器 Seq=1000 。
第二次握手。服务器接收到客户端请求后 发送确认准备给客户端 Seq=2000 Ack=1001
第三次握手。客户端接收到后 发送确认准备给服务器 Ack=2001
十一.
断开连接四次挥手:
第一次挥手。客户端向服务端发送断开连接请求,客户端进入wait1状态等待
第二次挥手。服务端收到请求并向客户端发送 进行断开准备工作,客户端进入wait2等待
第三次挥手。服务端准备好,并向客户端发送 可以断开了
第四次挥手。客户端发送你可以断开连接了 然后进入TIMEWAIT。服务端接收到后断开连接