概念
网络层是介于传输层和数据链路层之间,传输层提供端到端的进程间通信服务,数据链路层的功能则是实现物理链路直接相连的两个节点之间的数据帧传输服务, 网络层则关注的是如何将承载传输层报文段的网络层数据报从源主机送达到目的主机。
因为在大部分的网路环境下,绝大部分的数据报都要经过多个路由器才能从源主机送达到目的主机。因此网络层需要实现两项重要的功能:
1**.转 发:**当通过一条输入链路接收到一个分组后,路由器需要决策通过哪条输出链路将分组发送出去,并将分组从输入端口转发到输出端口。
2.**路由选择:**当分组从源主机流向目的主机是,必须通过某种方式决定分组经过的路由或者路径,计算分组所经过的路径的算法称为路由选择或者是路由选择算法。
TCP的基础是Socket,在TCP的链接中我们会使用到ServerSocket和Socket,那么,
2.Socket是什么?
Socket是应用层与TCP/IP协议簇通讯的中间抽象层,Socket是一组接口,在设计模式中,Socket的设计都类似于黑盒子,实现者无需关心内部代码实现,只需使用Socket提供的API即可。
socket通讯流程简介
接下来我们用JAVA来实现基于TCP/IP协议的网络通讯:
既然是通讯,至少存在两个对象。我们在这里建立一个Server端,一个user端。
我们先来实现Server端代码:
务端代码1
服务端代码2
user端代码:(user端我们需要知道服务器端的IP地址)
user端1
user端2
代码实现很简单。下面我们说说几个注意事项:
第一:运行前,先运行服务器端,然后确定server端IP地址,user端根据IP才能找到对应的主机。
第二:端口号一定要相同。
第三:不管是Server端还是user端,用完资源一定要记得释放,养成良好的习惯。
第四:实现多人通讯,一般使用的方法就是建立线程池,或者服务器端添加多线程。
学习TCP协议的三次握手以及四次挥手,重点了解为什么要三次握手,为什么要四次挥手,在整个过程中状态是如何变迁的。(经典的状态图以及握手挥手图)
a.为什么要三次握手?不是一次,两次或者四次。我们来论证一下,如果只有一次会发生什么情况,a向b发起连接请求,假设b没收到,则b其实完全不知道a发起了请求,而a也完全不知道b