用socket编程时,没有指定应用层协议就可以直接把client socket的数据发出去到server socket,socket编程不需要使用应用层协议吗?为啥用到了传输层协议(默认好像是TCP)却不用应用层协议?
tcp协议是4层协议,所有应用层协议都是基于tcp协议基础之上封装的协议。socket连接是tcp层连接。如果有实现特殊的需要,如实现web页面访问,使用http的7层协议实现。
举个例子:
Http是应用层协议,TCP是网络层协议,应用层在TCP/IP四层架构中位于TCP的上一层
TCP连接在实现时要借助Socket(套接字 IP+端口号)
Socket接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,程序员可以用它们来开发TCP/IP 网络上的应用程序
HTTP连接需要指明资源的URL,发出请求的应用不知道服务器的IP,虽然域名服务器也是要把域名解析成IP地址,但不属于应用所关心的范畴,是网络层应该完成的工作。所以Http连接属于无状态的短连接,若再请求其他数据,需要再重新建立连接。客户端向服务器发送请求后,服务器才知道客户端的存在。
TCP连接实现时需要指明IP地址和端口号,就可以跟目的主机通过三次握手建立联系,该连接一直保持直到某一方提出取消连接,通过四次握手关闭连接。Socket支持TCP/UDP协议,如果使用TCP协议,那么socket连接就是TCP连接。
你在哪一层都能发送数据(有权限的话),不同的是数据有没有相应的结构比如http有http头,tcp有tcp头,ip有ip头 。换句话说就是不同层对数据进行了不同的包装
OSI 7层协议中,你可以用任意一层的协议发送数据(如果你不嫌麻烦且足够牛逼)。用哪一层协议是根据你的实际应用决定的,越往上层越简单,有更多的API可以使用。