0:什么是网络编程
就是用来实现网络互连的不同计算机上运行的程序间可以进行数据交换。
1:网络编程三要素:ip,端口,传输协议
(1)ip
每个设备在网络中的唯一标识
每台网络终端在网络中都有一个独立的地址,我们在网络中传输数据就是使用这个地址。
ipconfig:查看本机IP192.168.12.42
ping:测试连接192.168.40.62
本地回路地址:127.0.0.1 255.255.255.255是广播地址
IPv4:4个字节组成,4个0-255。大概42亿,30亿都在北美,亚洲4亿。2011年初已经用尽。
IPv6:8组,每组4个16进制数。
1a2b:0000:aaaa:0000:0000:0000:aabb:1f2f
1a2b::aaaa:0000:0000:0000:aabb:1f2f
1a2b:0000:aaaa::aabb:1f2f
1a2b:0000:aaaa::0000:aabb:1f2f
1a2b:0000:aaaa:0000::aabb:1f2f
(2)端口
每个程序在设备上的唯一标识
每个网络程序都需要绑定一个端口号,传输数据的时候除了确定发到哪台机器上,还要明确发到哪个程序。
端口号范围从0-65535
编写网络应用就需要绑定一个端口号,尽量使用1024以上的,1024以下的基本上都被系统程序占用了。
常用端口
mysql: 3306
oracle: 1521
web: 80
tomcat: 8080
QQ: 4000
feiQ: 2425
(3)传输协议
为计算机网络中进行数据交换而建立的规则、标准或约定的集合。
(1)UDP
面向无连接,数据不安全,速度快。不区分客户端与服务端。
(2)TCP
面向连接(三次握手),数据安全,速度略低。分为客户端和服务端。
三次握手: 客户端先向服务端发起请求, 服务端响应请求, 传输数据
2:socket编程
网络上具有唯一标识的IP地址和端口号组合在一起才能构成唯一能识别的标识符套接字。
通信的两端都有Socket。
网络通信其实就是Socket间的通信。
数据在两个Socket间通过IO流传输。
Socket在应用程序中创建,通过一种绑定机制与驱动程序建立关系,告诉自己所对应的IP和port。
else1:
1,网络通信
(1)通过对方的ip找到对方的主机
(2)通过端口号(逻辑端口)找到对方接收数据的应用程序
(3)通信双放需要统一通信规则(协议),国际组织定义了统一的通信规则(TCP/IP)
2,两个主机要进行通信,不一定要使用TCP/IP协议,只要通信双方安装了相同的通信协议即可进行通信。
之所以我们平时都用TCP/IP是因为要保证任意两哥主机之间可以通讯,就必须保证任意两台主机之间都有相同的传输协议,因此就有了国际上统一的通信协议,TCP/IP协议。
3,为了安全起见,有很多比较机密的机构都使用了自己特定的协议,外人没有相同的协议也就无法进行通信,更无法入侵。
4,IP地址分四段,每段的最大值255
127.0.0.1本地回环地址(本机)没有配置任何ip地址的情况下,本机默认的ip就是127.0.0.1
这个地址装网卡就有,可以用来测试网卡
ping 127.0.01出现问题则说明网卡出现了问题
5,192.168.XX.XX在每个局域网中都有,他不会发生冲突吗?
不会。他是在局域网内起作用的,而每个局域网之间是相互独立的。所以不会发生冲突,当局域网内的ip要访问外网时,会有相应的分配规则,为内网ip分配一个独一无二的外网ip访问互联网。
6,局域网内的地址可以随便设只要保证通信双方在同一网段即可
7,由于全球的计算机的数量不断的增长,导致ip地址越来越不够用,所以就有了使用子网掩码划分网段,一个区域共用一个子网。
8,四段已经不够使用了,就有了IPV6
9,端口的范围:0--65535 0-1024:通常分给系统端口,一旦发生冲突,两个端口都不可用
web80 tomcat8080 mysql3306 oracle1521(这些是默认的,可以修改)
10,传输协议通常使用TCP/UDP
esle2:
1,网络层次的细致划分(每个层次都有自己的功能)
OSI参考模型(七层)
我们是处于应用层,假设我们要通过qq发送一条数据给另一台主机的qq,
首先:qq是在应用层的,应用层会将数据封包加上应用层的独特信息,发送到表示层,表示层同样将传递过来的数据再次封包加上表示层的独特信息,然后依次往下传,依次封包,这个过程叫做封包。
其中在传输层封装的信息中,决定了信息是使用TCP还是UDP
然后网络层中封装的信息中添加了ip信息,决定了数据包最终发送到哪个主机上
然后在物理层封装包完成后将数据包发送至对方的物理层
对方在依次从物理层到应用层层层解包,最终将发送的数据传递到应用层,再根据数据包中的qq端口地址发送给qq。