网络联机

来源:互联网 发布:btsow最新域名 编辑:程序博客网 时间:2024/05/01 21:36

TCP/IP协议(transport Control Protocol)/(internet protocol)


tcp主要用于实现源主机与目的主机操作系统之间分布式进程通信的功能,ip协议主要用于标识节点地址与实现路由选择功能

TCP负责发现传输的问题,一有问题就发出信号,要求重新传输,直到所有数据安全正确地传输到目的地。而IP是给因特网的每一台联网设备规定一个地址。与udp区别,udp直接把数据包发过去,而不需像tcp那样先建立连接。



路由器(router):


什么是端口(port)啊?

本地操作系统会给那些有需求的进程分配协议端口(protocal port,即我们常说的端口),每个协议端口由一个正整数标识,如:80,139,445,等等。当目的主机接收到数据报后,将根据报文首部的目的端口号,把数据发送到相应端口。

ip+端口就组成了目的主机+主机内的目的进程(服务:FTP服务,web服务等,也可以解释为应用程序)


域名系统(Domain Name System,域名系统DNS

DNS是指:域名服务器(Domain Name Server)

域名系统是一个分布的数据库,它提供将主机名(就是网址啦)转换成IP地址的服务。



以太网:以太网就是【采用了CSMA/CD协议的局域网】



mac地址, MAC地址已经写在网卡芯片上,固定,不会变,与公网IP地址一样全球唯一


ARP叫做地址解析协议,是用IP地址换MAC地址的一种协议


网关(Gateway)

网关的IP地址是具有路由功能的设备的IP地址,具有路由功能的设备有路由器、启用了路由协议的服务器(实质上相当于一台路由器)、代理服务器(也相当于一台路由器)。


子网掩码(subnet mask)

(判断两个IP地址是否在同一个子网),二进制数字“1”表示,1的数目等于网络位(子网号)的长度;右边是主机位,用二进制数字“0”表示,0的数目等于主机位的长度,子网的主机数(2的主机位数次方-2,因为主机号全为1时表示该网络广播地址,全为0时表示该网络的网络号,这是两个特殊地址)


如何判断一个IP地址是公网还是私网?

A类私有 地址:10.0.0.0-10.255.255.255B类私有 地址:172.16.0.0-172.31.255.255C类私有 地址:192.168.0.0-192.168.255.255

私网下还分有很多子网。子网内的各个主机可以相互直接访问(即在Socket里给IP地址就可以连接),访问不在子网内的IP地址时(如何判断该地址不在同一子网就用到子网掩码),主机先去找默认网关,由默认网关去找目的地址。


广域网(WAN、公网、外网)与局域网(LAN、私网、内网)电脑交换数据要通过路由器或网关的NAT(网络地址转换)进行。一般说来,局域网(LAN、私网、内网)内电脑发起的对外连接请求,路由器或网关都不会加以阻拦,但来自广域网对局域网内电脑连接的请求,路由器或网关在绝大多数情况下都会进行拦截。






Socket


把Socket理解为一个连接(一条连线)的一端(端点)。

每个端点有两个串流,一个是输入流(用socket.getInputStream()得到,某个Socket A的输入流,指从这个A的另一端(也是Socket)读取数据 ),一个是输出流(用socket.getoutputStream()得到,某个Socket A的输出流,指输出数据到这个A 的另一端(也是Socket)).


关于:

ServerSocket serverSock =new ServerSocket(4242);服务器监听4242端口(1处).

有客户端请求4242端口(Socket sock =new Socket("120.0.0.1",4242);(此Socket为3处))


Socket sock =serverSock.accept();(此Socket为2处).


这个函数先新建一个Socket,然后等待客户端的连接请求,然后就是

三次握手

在TCP/IP协议中,TCP协议通过三次握手建立一个可靠的连接


第一次握手:客户端尝试连接服务器,向服务器发送syn包(同步序列编号Synchronize Sequence Numbers),syn=j,客户端进入SYN_SEND状态等待服务器确认

第二次握手:服务器接收客户端syn包并确认(ack=j+1),同时向客户端发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态

第三次握手:第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手

定睛一看,服务器socket与客户端socket建立连接的部分其实就是大名鼎鼎的三次握手

服务端从SocketInputStream中读取数据的操作也是阻塞式的,如果从输入流中没有读取到数据程序会一直在那里不动,直到客户端往Socket的输出流中写入了数据,或关闭了Socket的输出流。;类似从屏幕读取数据,一直不动直到按下回车。

当服务端监听客户端的输出流while ((message = reader.readLine()) != null)时,客户端若断开连接,服务端会马上抛出异常,

所以说,Socket的出现只是使得程序员更方便地使用TCP/IP协议栈而已,是对TCP/IP协议的抽象

socket起源于UNIX,在Unix一切皆文件哲学的思想下,socket是一种"打开—读/写—关闭"模式的实现,服务器和客户端各自维护一个"文件",在建立连接打开后,可以向自己文件写入内容供对方读取或者读取对方内容,通讯结束时关闭文件。



0 0
原创粉丝点击