网络编程
目录:
软件架构
网络协议(外链)
通讯协议
网络层
传输层
socket
TCP传输
UDP传输
简易聊天室
通讯与连接循环
软件架构:
1.C/S client ==== server 2.B/S browser === server 在不同的计算机上,一个安装客户端,另一安装服务端,通过网络来通讯.
client<---基于网络通信--->server
browser<---基于网络通信--->server
server端必须满足的条件:
1、稳定运行(网络、硬件、操作系统、服务端应用软件),对外一直提供服务
2、服务端必须绑定一个固定的地址
网络通讯:
互联网要完成通讯必须具备的条件 1.物理连接介质 (网线,WIFI,光纤) 2.必须遵循相同的标准,即互联网协议
在计算机网络中同样需要具备这两个条件.
作为应用软件开发者,不需要关心第一步,重点是通讯的标准(通讯的协议)
通讯协议:
自定义协议:
任何一种通信协议都必须包含两部分:
1、报头:必须是固定长度
2、数据
osi七层协议:
应用
表示
会话
传输
网络
数据链路层
物理
程序员需要关注的是传输层协议.
简化后得到五层:
应用: 没有固定协议,需要程序员协商
传输: TCP和UDP,通讯协议
网络: ip协议,找到局域网
数据链路层: 以太网协议,发送二进制的格式
物理: 接口协议,发送二进制
osi之网络层:
ip用来定位子网的网关,mac用来定位子网中的计算机.
已知IP地址172.16.10.1和172.16.10.2的子网掩码都是255.255.255.0,请问它们是否在同一个子网络?两者与子网掩码分别进行AND运算.
172.16.10.1: 10101100.00010000.00001010.00000001 255.255.255.255.0: 11111111.11111111.11111111.00000000 子网地址: 10101100.00010000.00001010.00000000 172.16.10.0 172.16.10.2: 10101100.00010000.00001010.00000001 255.255.255.255.0: 11111111.11111111.11111111.00000000 子网地址: 10101100.00010000.00001010.00000000 172.16.10.0
AND运算之后结果相同,说明是属于同一子网.
标识地址的方式:
ip+mac就能标识全世界范围内独一无二的一台计算机
ip+mac+port就能标识全世界范围内独一无二的一个基于网络通信的应用软件
url地址:标识全世界范围内独一无二的一个资源
以太网协议与ip协议:
大型局域网:由小局域网互联而成
osi之传输层:
传输层功能:建立端口到端口的通信(端口范围0-65535,0-1023为系统占用端口)
TCP协议:
三次握手建立连接
四次挥手断开连接
1、为何建连接要三次而断开连接却需要四次
2、为何tcp协议是可靠协议,而udp协议是不可靠协议
3、tcp协议建立连接与断开连接的状态信息以及表示的意义
图示:
TCP和UDP是传输层最常见的协议
主要控制传输数据的方式
TCP
优点:通过三次握手来与服务器建立连接
可以保证数据的完整性
a机器给b机器发送数据包 要求b机器必须立即返回一个确认包
a机器会等待一段时间,如果超时还没有收到确认,则重发数据
缺点:传输效率低
使用场景: 文字聊天,支付宝转账等,
UDP
传输方式:不需要建立连接,直接发送
缺点:不能保证数据的完整性
优点:传输效率比TCP高
使用场景:视频通话,语音通话,UDP
socket套接字:
socket是什么?
翻译过来称为套接字
是对底层的 TCP IP UDP 等网络协议进行封装
使得上层的应用程序开发者,不用直接接触这对复杂,丑陋的协议
在程序员的言论,他就是一个封装好的模块!
要完成网络通讯,只需要使用系统提供的socket模块就行
在使用socket的时候用户需要关心的是ip地址,port端口, 传输协议TCP/UDP,你要发送的数据data
在写网络编程的时候,必然是有两部分代码,对应着客户端和服务器