전송 계층   

 

  물리 계층, 데이터 링크 계층, 네트워크 계층 이 세 개의 계층만 있으면 목적지에 데이터를 보낼 수 있다. 하지만, 데이터가 손상되거나 유실되면 이 세 개의 계층에서는 아무것도 해줄 수 없다.

 

 이를 방지해주는 역할은 OSI 모델에서 전송 계층이 수행한다. 전송 계층목적지에 신뢰할 수 있는 데이터를 전달하기 위해 필요하다. 

 

 

 전송 계층에는 오류를 점검하는 기능이 있는데, 오류가 발생하면 데이터를 재전송하도록 요청한다. 또한, 전송된 데이터의 목적지가 어떤 애플리케이션인지 식별하는 기능을 가지고 있다. 예를 들어, 웹에서 사용하는 데이터인데 메일 프로그램에 전송하는 것을 방지해준다. 

 

 


 

    연결형 통신과 비연결형 통신   

 

  전송 계층의 특징을 간단히 설명하면 신뢰성/정확성과 효율성으로 구분할 수 있다. 

 

 신뢰성/정확성은 데이터를 목적지에 문제없이 전달하는 것이고, 효율성은 데이터를 빠르고 효율적으로 전달하는 것이다. 이렇게 신뢰할 수 있고 정확한 데이터를 전달하는 통신을 연결형 통신이라고 하고, 효율적으로 데이터를 전달하는 통신을 비연결형 통신이라고 한다. 

 

 

 그렇다면 신뢰성과 정확성이 보장되지 않는 비연결형 통신은 보통 언제 쓰일까? 동영상을 볼 때 많이 사용한다. 동영상은 신뢰할 수 있고 정확한 데이터 전송보다는 빠른 전송이 필요하기 때문이다. 데이터가 늦게 도착해서 화면이 버벅거리는 동영상보다는 데이터가 조금 유실되더라도 원활하게 보는 것이 좋다.  

 

 또한, 연결형 통신 프로토콜에는 TCP가 사용되고, 비연결형 통신 프로토콜에는 UDP가 사용된다.

 


    TCP란   

 

  데이터 링크 계층에서 이더넷 헤더를 붙여 프레임을 만들고 네트워크 계층에서 IP 헤더를 붙여 IP 패킷을 만든 것처럼 전송 계층에서도 TCP 헤더를 붙여 세그먼트(Segment)를 만드는 캡슐화를 진행한다. 

 

 

 

 

  TCP는 연결형 통신에 사용한다. 연결형 통신은 꼼꼼하게 상대방을 확인하면서 데이터를 전송해야 하는데 그 전에 해야할 일은 연결(Connection)이라는 가상의 독점 통신로를 확보해야 한다. 

 

※ 연결(Connection): TCP 통신에서 정보를 전달하기 위해 사용되는 가상의 통신로이며 연결을 확립하고 데이터를 전송한다.

 

 연결을 확립하기 위해서는 TCP 헤더의 코드 비트를 확인해야 한다. 코드 비트는 연결의 제어 정보가 기록되는 곳이다. 코드 비트 중에서도 연결 요청을 뜻하는 SYN확인 응답을 뜻하는 ACK이 중요하다.

 

 


    3-way 핸드 셰이크   

 

  연결(Connection)은 SYN와 ACK를 사용하여 확립할 수있다. 신뢰할 수 있는 연결을 하려면 데이터를 전송하기 전에 패킷을 교환하는데 다음과 같이 세 번 확인 한다. 

 

 

  1. 통신을 하려면 컴퓨터2에게 허가를 받아야 하므로, 컴퓨터1에서 연결 확립 허가를 받기 위한 요청(SYN)를 보낸다.
  2. 컴퓨터2는 컴퓨터1이 보낸 요청을 받은 후에 허가한다는 응답을 회신하기 위해 연결 확립 응답(ACK)를 보내고 동시에 컴퓨터1에게 데이터 전송 허가를 받기 위해 연결 확립 요청(SYN)를 보낸다.
  3. 컴퓨터2의 요청을 받은 컴퓨터1은 컴퓨터2로 허가한다는 응답으로 연결 확립 응답(ACK)을 보낸다. 

 

  이처럼 데이터를 보내기 전에 연결을 확립하기 위해 패킷 요청을 세 번 교환하는 것을 3-way 핸드 셰이크(three-way handshake)라고 한다. 

 

  연결을 끊을 때에는 FIN와 ACK를 사용하여 확립할 수있다. FIN은 연결 종료를 뜻한다. 이처럼 연결을 종료하기 위해 패킷 요청을 네 번 교환하는 것을 4-way 핸드 셰이크(four-way handshake)라고 한다. 

 

  1. 컴퓨터 1에서 컴퓨터 2로 연결 종료 요청(FIN)을 보낸다.
  2. 컴퓨터2에서 컴퓨터 1로 연결 종료 응답(ACK)을 반환한다.
  3. 또한 컴퓨터 2에서도 컴퓨터 1로 연결 종료 요청(FIN)을 보낸다.
  4. 컴퓨터 1에서 컴퓨터 2로 연결 종료 응답(ACK)을 반환한다.