概述

计算机网络是通过传输介质、通信设施和网络通信协议,把分散在不同地点的计算机设备互连起来,实现资源共享和数据传输的系统。网络编程就是编写程序使联网的两个(或多个)设备(例如计算机)之间进行数据传输。

网络协议

计算机之间能够进行相互通信是因为它们都共同遵守一定的规则,即网络协议。

网络体系结构

计算机网络体系结构是计算机网络层次和协议的集合,网络体系结构对计算机网络实现的功能,以及网络协议、层次、接口和服务进行了描述,但并不涉及具体的实现。接口是同一节点内相邻层之间交换信息的连接处,也叫服务访问点(SAP)。

网络的分类

按照地理范围主要将网络分为局域网城域网广域网因特网

OSI网络分层模型

OSI模型层次功能

物理层 物理层处于OSI的最底层,是整个开放系统的基础。物理层涉及通信信道上传输的原始比特流(bits),它的功能主要是为数据端设备提供传送数据的通路以及传输数据
数据链路层 数据链路层的主要任务是实现计算机网络中相邻节点之间的可靠传输,把原始的、有差错的物理传输线路加上数据链路协议以后,构成逻辑上可靠的数据链路。需要完成的功能有链路管理、成帧、差错控制以及流量控制等。其中成帧是对物理层的原始比特流进行界定,数据链路层也能够对帧的丢失进行处理
网络层 网络层涉及源主机节点到目的主机节点之间可靠的网络传输,它需要完成的功能主要包括路由选择、网络寻址、流量控制、拥塞控制、网络互连等
传输层 传输层起着承上启下的作用,涉及源端节点到目的端节点之间可靠的信息传输。传输层需要解决跨越网络连接的建立和释放,对底层不可靠的网络,建立连接时需要三次握手,释放连接时需要四次挥手
会话层和表示层 会话层的主要功能是负责应用程序之间建立、维持和中断会话,同时也提供对设备和结点之间的会话控制,协调系统和服务之间的交流,并通过0提供单工、半双工和全双工3种不同的通信方式,使系统和服务之间有序地进行通信
应用层 它是直接为应用进程提供服务的。其作用是在实现多个系统应用进程相互通信的同时,完成一系列业务处理所需的服务

TCP/IP模型

TCP/IP协议是一个开放的网络协议簇,它的名字主要取自最重要的网络层IP协议和传输层TCP协议。TCP/IP协议定义了电子设备如何连入因特网,以及数据如何在它们之间传输的标准。

TCP/IP参考模型采用4层的层级结构,每一层都呼叫它的下一层所提供的协议来完成自己的需求,这4个层次分别是:网络接口层互联网层 (IP层)传输层(TCP层)应用层

TCP/IP模型层次功能

网络接口层 TCP/IP协议对网络接口层没有给出具体的描述,网络接口层对应着物理层和数据链路层
互联网层(IP层) 互联网层是整个TCP/IP协议栈的核心。它的功能是把分组发往目标网络或主机。同时,为了尽快地发送分组,可能需要沿不同的路径同时进行分组传递。因此,分组到达的顺序和发送的顺序可能不同,这就需要上层必须对分组进行排序。互联网层除了需要完成路由的功能外,也可以完成将不同类型的网络(异构网)互连的任务。除此之外,互联网层还需要完成拥塞控制的功能
传输层(TCP层) TCP层负责在应用进程之间建立端到端的连接和可靠通信,它只存在与端节点中。TCP层涉及两个协议,TCP和UDP。其中,TCP协议提供面向连接的服务,提供按字节流的有序、可靠传输,可以实现连接管理、差错控制、流量控制、拥塞控制等。UDP协议提供无连接的服务,用于不需要或无法实现面向连接的网络应用中
应用层 应用层为Internet中的各种网络应用提供服务

OSI模型和TCP/IP模型对比

常见的网络协议

TCP协议
TCP(Transmission Control Protocol ,传输控制协议)是面向连接的传输层协议。TCP层是位于IP层之上,应用层之下的中间层。不同主机的应用层之间经常需要可靠的、像管道一样的连接,但是IP层不提供这样的流机制,而是提供不可靠的包交换。TCP协议采用字节流传输数据。

TCP报文段格式
TCP报文段包括协议首部和数据两部分,协议首部的固定部分有20个字节,首部的固定部分后面是选项部分。

报文段首部各个字段的含义

1.源端口号以及目的端口号,各占2个字节,端口是传输层和应用层的服务接口,用于寻找发送端和接收端的进程,一般来讲,通过端口号和IP地址,可以唯一确定一个TCP连接,在网络编程中,通常被称为一个socket接口。

2.序号,占4字节,用来标识从TCP发送端向TCP接收端发送的数据字节流。

3.确认序号,占4字节,包含发送确认的一端所期望收到的下一个序号,因此,确认序号应该是上次已经成功收到数据字节序号加1.

4.数据偏移,占4位,用于指出TCP首部长度,若不存在选项,则这个值为20字节,数据偏移的最大值为60字节。

5.保留字段占6位,暂时可忽略,值全为0

6.标志位

URG(紧急) 为1时表明紧急指针字段有效
ACK(确认) 为1时表明确认号字段有效
PSH(推送) 为1时接收方应尽快将这个报文段交给应用层
RST(复位) 为1时表明TCP连接出现故障必须重建连接
SYN(同步) 在连接建立时用来同步序号
FIN (终止) 为1时表明发送端数据发送完毕要求释放连接

1.接收窗口占2个字节,用于流量控制和拥塞控制,表示当前接收缓冲区的大小。在计算机网络中,通常是用接收方的接收能力的大小来控制发送方的数据发送量。TCP连接的一端根据缓冲区大小确定自己的接收窗口值,告诉对方,使对方可以确定发送数据的字节数。

2.校验和占2个字节,范围包括首部和数据两部分。

3.选项是可选的,默认情况是不选。

三次握手
TCP是面向连接的协议,因此每个TCP连接都有3个阶段:连接建立、数据传送和连接释放。连接建立经历三个步骤,通常称为“三次握手”。

第一次握手
客户机发送连接请求报文段到服务器,并进入SYN_SENT状态,等待服务器确认。(SYN = 1,seq=x)

第二次握手
服务器收到连接请求报文,如果同意建立连接,向客户机发回确认报文段,并为该TCP连接分配TCP缓存和变量。(SYN=1,ACK=1,seq=y,ack=x+1)。

第三次握手
客户机收到服务器的确认报文段后,向服务器给出确认报文段,并且也要给该连接分配缓存和变量。此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。(ACK=1,seq=x+1,ack=y+1)。

UDP协议
UDP,用户数据报协议,英文全称是User Datagram Protocol,它是TCP/IP协议簇中无连接的运输层协议。

UDP协议格式

UDP协议十分简单,它由两部分组成:首部数据
其中,首部仅有8个字节,包括源端口和目的端口,长度(UDP用于数据报的长度)、校验和。

HTTP协议

HTTP,超文本传输协议,HTTP是一种应用层协议,它是基于TCP协议之上的请求/响应式的协议,即一个客户端与服务器建立连接后,向服务器发送一个请求;服务器接到请求后,给予相应的响应信息。HTTP协议默认的端口号为80。HTTP协议是基于TCP协议之上的请求/响应式协议。
HTTP报文:
HTTP报文主要有请求报文和响应报文两种。

HTTP请求报文由请求行、首部行和实体主体组成,由浏览器发送给服务器。上面这张图中SP表示空格,cr lf表示回车和换行。

上面这张图是HTTP响应报文,它由状态行、首部行和实体主体组成。下面两张图是在谷歌浏览器内访问服务器查看的HTTP请求和响应。


http请求方法和响应状态码

http请求方法列表

响应状态码列表:

HTTP和HTTPS的区别

HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。它是一个URI scheme(抽象标识符体系),句法类同http:体系。用于安全的HTTP数据传输。https:URL表明它使用了HTTP,但HTTPS存在不同于HTTP的默认端口及一个加密/身份验证层(在HTTP与TCP之间)。
超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息。HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此HTTP协议不适合传输一些敏感信息,比如信用卡号、密码等。
为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS。为了数据传输的安全,HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。
HTTPS和HTTP的区别主要为以下四点:1、https协议需要到ca申请证书,一般免费证书很少,需要交费。2、http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

TCP协议和UDP协议的区别

TCP协议是传输控制协议,UDP协议是用户数据报协议,两者都是传输层的协议,主要区别在于前者是可靠的,面向连接的协议,后者是不可靠的,无连接的协议。其它的区别还有,TCP协议传输速度慢,UDP常用于一次性传输比较少量数据的网络应用。
TCP三次握手为什么不能是两次
主要是防止两次握手情况下已经失效的连接请求报文段突然又传送到服务端而产生错误。例如,客户机A向服务器B发送TCP连接请求,第一个连接请求报文在网络的某个节点长时间滞留,A超时后认为报文丢失,于是再重传一次连接请求,B收到后建立连接。数据传输完毕后双方断开连接,而这时之前滞留的连接请求到达了服务端B,而B认为A又发来连接请求。如果两次握手建立连接,A并无连接请求,造成B的资源浪费。
HTTP请求的GET方法和POST方法的区别

网络编程模型

在网络通信中主要有两种模式的通信方式:一种是客户机/服务器(Client/Server)模式,简称为 C/S 模式;另一种是浏览器/服务器(Browser/Server)模式,简称 B/S 模式。
Java 网络编程-Socket
Socket,套接字,就是两台主机之间逻辑连接的端点。TPC/IP协议是传输层协议,主要解决数据如何在网络中传输,而HTTP是应用层协议,主要解决如何包装数据。Socket,本质上就是一组接口,是对TCP/IP协议的封装和应用.

流量控制和拥塞控制

拥塞控制
网络拥塞现象是指到达通信子网中某一部分的分组数量过多,使得该部分网络来不及处理,以致引起这部分乃至整个网络性能下降的现象,严重时甚至会导致网络通信业务陷入停顿,即出现死锁现象。拥塞控制是处理网络拥塞现象的一种机制。
流量控制
数据的传送与接收过程当中很可能出现收方来不及接收的情况,这时就需要对发方进行控制,以免数据丢失

多线程如何同步

windows

线程同步有四种方式:临界区、内核对象、互斥量、信号量。

Linux

线程同步有最常用的是:互斥锁、条件变量和信号量。

网络编程的一般步骤

对于TCP连接

服务器端
1)创建套接字create;
2)绑定端口号bind;
3)监听连接listen;
4)接受连接请求accept,并返回新的套接字;
5)用新返回的套接字recv/send;
6)关闭套接字。

客户端
1)创建套接字create;
2)发起建立连接请求connect;
3)发送/接收数据send/recv;
4)关闭套接字。

TCP总结

Server端:create – bind – listen-- accept-- recv/send-- close

Client端:create------- conncet------send/recv------close.

对于UDP连接

服务器端
1)创建套接字create;
2)绑定端口号bind;
3)接收/发送消息recvfrom/sendto;
4)关闭套接字。

客户端
1)创建套接字create;
2)发送/接收消息sendto/recvfrom;
3)关闭套接字.

UDP总结

Server端:create----bind ----recvfrom/sendto----close

Client端:create---- sendto/recvfrom----close.

综合复习(五)——网络编程相关推荐

  1. java 网络实验_Java实验五网络编程与安全

    实验五 网络编程与安全 实验准备 活动一 两人一组结对编程: 0. 参考http://www.cnblogs.com/rocedu/p/6766748.html#SECDSA 1. 结对实现中缀表达式 ...

  2. 20165201 实验五 网络编程与安全

    ##20165201 实验五 网络编程与安全 网络编程与安全-1 实验目的与要求: 两人一组结对编程: 参考http://www.cnblogs.com/rocedu/p/6766748.html#S ...

  3. 2017-2018-2 20165329 实验五 网络编程与安全

    2017-2018-2 20165329 实验五 网络编程与安全 实验报告封面 课程:Java程序设计 班级:1653班 姓名:何佳伟 学号:20165329 指导教师:娄嘉鹏 实验日期:2018年5 ...

  4. #20175201 实验五 网络编程与安全

    一.实验五 网络编程与安全-1 1.实验要求: 两人一组结对编程: (1)参考http://www.cnblogs.com/rocedu/p/6766748.html#SECDSA : (2)结对实现 ...

  5. 实验五 网络编程与安全-----实验报告

    一.实验五 网络编程与安全-1 1.实验要求: 两人一组结对编程: (1)参考http://www.cnblogs.com/rocedu/p/6766748.html#SECDSA : (2)结对实现 ...

  6. java小球碰撞实验报告_20155317 《Java程序设计》实验五网络编程与安全实验报告...

    20155317 <Java程序设计>实验五网络编程与安全实验报告 遇到问题 在刚开始启动客户端或者服务端时,出现了一系列的错误情况,总是提示异常信息 后来经过询问同学,反应将端口号修改一 ...

  7. 2016-2017-2 20155322 实验五 网络编程与安全

    2016-2017-2 20155322 实验五 网络编程与安全 目录 1. 目录 1.1 实践一 1.2 实践二 1.3 实践二 1.4 实践二 1.5 实践二 2.实验心得与体会 3.PSP(Pe ...

  8. 实验五 网络编程与安全

    一.实验报告封面 课程:Java程序设计 班级:1653班 姓名:高君天 学号:20165319 指导教师:娄嘉鹏 实验日期:2018年5月28日 实验时间:13:45 - 3:25 实验序号:实验五 ...

  9. 20155207 实验五 网络编程与安全

    20155207 实验五 网络编程与安全 实验内容 任务一 两人一组结对编程: 参考http://www.cnblogs.com/rocedu/p/6766748.html#SECDSA 结对实现中缀 ...

  10. 20175212童皓桢 实验五 网络编程与安全

    20175212童皓桢 实验五 网络编程与安全 实验内容 结对编程,完成网络编程与安全相关内容 实验步骤 任务一 任务一要求: 结对实现中缀表达式转后缀表达式的功能 MyBC.java 结对实现从上面 ...

最新文章

  1. python not not()
  2. adoquery.parameters流化
  3. python tcp服务器_python实现TCP服务器端与客户端的方法详解
  4. html jade文件,Jade模板
  5. Java调用Lua(转)
  6. ftp服务器文件夹设置,ftp服务器可设置的文件夹
  7. 什么是铠装光纤跳线及它的特点?
  8. STM32+ESP8266获取时间和天气
  9. 在线协作编辑器EtherPad使用说明
  10. 天燃气站与加油站应该如何安装摄像头?
  11. Fabric v2.3 下载二进制文件和镜像bootstrap.sh脚本解析
  12. linux 中vi 显示行号的设置
  13. java基于springboot+vue的旧衣服捐赠系统 毕业设计nodejs技术
  14. linux 文件 图标 覆盖,在Deepin下处理Microsoft Edge替换图标及替换文件
  15. msp430g2553串口接受数据_详细解读:MSP430G2553单片机串口通信
  16. ssmtp使用阿里企业邮箱发送邮件
  17. 百度贴吧怎么进不去_怎么从百度贴吧引流宝妈粉,我用百度霸屏做内容吸粉!...
  18. c#入门基础与精通的各类电子书籍pdf
  19. R语言Copula模型分析股票市场板块相关性结构
  20. 实时监测网络是否断线的几种办法(转coolend)

热门文章

  1. 【追光者】今天,来谈谈我的金钱观,却不止于金钱观
  2. Chrome插件:拦截页面请求
  3. 三菱电梯维修故障服务器,三菱电梯故障及维修方法大合集之一
  4. matlab拉普拉斯图像锐化处理,MATLAB中的拉普拉斯图像滤波与锐化图像
  5. 2022年全球及中国等速万向轴市场需求调查与运行战略前景规划报告
  6. 程序员为对抗雾霾可以做些什么?
  7. 【预测模型】基于灰色预测模型预测人口出生率
  8. 大学生为什么要写博客?意义?
  9. 部署企业版lync2013之六:lync与exchange集成-1
  10. 如何恢复笔记本的工作报表呢