1、TCP/IP协议4层模型
电子设备之间要连入网络,就有遵循一定的网络协议。TCP/IP就是这样一个协议(Transmisssion Control Protocol/Internet Protocol)。这个协议从电子设备中物理介质—-IP协议—-TCP/UDP——最终到HTTP/TFP/SMTP协议。通过这样一层一层的协议,实现网络连接。
1、网络访问层,包括数据链路层和物理层。
物理层:物理层是定义物理介质的各种特性。
数据链路层是负责接收IP数据包并通过网络发送,或者从网络上接收物理帧,抽出IP数据包,交给IP层。
2、网络层
网络层主要包括IP协议((Internet Protocol),ICMP层(Internet Control Message Protocol),控件报文协议,ARP地址转换协议等
IP层是网络层的核心:将IP封装后给接口层
ICMP是网络层补充,可以回送报文。用来检测网络是否通畅。
Ping命令就是发送ICMP的echo包,通过回送echo relay进行网络测试。
3、传输层
TCP的三次握手就是在传输层完成的。
作用主要包括格式化信息流,提供可靠传输,传层协议规定接收端必须发送确认。假如丢失,重新发送,这样完成三次握手。
传输层协议主要是:TCP(Transmission Control Protocol)和UDP( User Datagram protocal)
4、应用层
向用户提供一组常用的应用程序,比如电子邮件,文件传输访问,远程登陆
HTTP:Hypertext Transfer Protocol超文本传输协议,端口80
FTP:文件传输协议,端口是20H
DNS:域名解析服务,提供域名到ip地址转换。
SMTP:简单邮件传输协议。
2、HTTP协议
http://blog.youkuaiyun.com/androidxiaogang/article/details/51973351
http协议处于4层网络协议的最顶层应用层(物理层,数据链路层,网络层,传输层,应用层)。以浏览器与服务器之间通信为例,就好像人与人之间的写信,我们必须知道收件人格式(比如信的语言,地址,姓名,还有信的内容等),如果没有这此格式,好比不的懂外语,和外国人写信,是没有办法相互理解的。下面我们通过Fidder抓包来看看浏览器与服务器之间是如何通信的。
3、Socket
上面描述了TCP/IP协议,也就是如果我们开发应用需要网络通信,就必须按照上述协议。但开发者怎么做呢?因此就出来socket编程,它的本质就是TCP/IP为开发者提供的编程接口
示例代码如下
使用Socket的服务器端
public class ServerDemo {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
// 创建服务器端Socket对象;
ServerSocket ss = new ServerSocket(14910);
// 2、监听(待命,等待,等待数据流过来)
System.out.println("Server已经启动监听");
Socket s = ss.accept();
// 3、使用输入流对象接收数据
InputStream is = s.getInputStream();
byte[] bys = new byte[1024];
int len = is.read(bys);
System.out.println(new String(bys, 0, len));
// 4、释放资源
s.close();
// ss.close();//服务器一般不关闭
}
}
客户端代码
public class ClientSocket {
/**
* @param args
* @throws IOException
* @throws UnknownHostException
*/
public static void main(String[] args) throws UnknownHostException,
IOException {
// 1、 创建socket对象
Socket s = new Socket(InetAddress.getByName("yu"), 14910);
// 2.获取输出流对象
OutputStream os = s.getOutputStream();
// 3.输出数据
os.write("客户端------hello tcp!".getBytes());
// 4.释放资源
s.close();
}
}