TCP/IP HTTP Socket区别

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值