TCP/IP HTTP Socket区别

来源:互联网 发布:python实现堆排序算法 编辑:程序博客网 时间:2024/06/06 13:27

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.csdn.net/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();    }}
2 0
原创粉丝点击