이 포스팅은 네트워크 기초 시리즈 5 편 중 5 번째 글 입니다.
목차
전송 계층
- 물리 계층, 데이터 링크 계층, 네트워크 계층 이 세개의 계층만 있으면 목적지에 데이터를 보낼 수 있다.
- 하지만 데이터 유실, 손상되는 경우 알수도 없고 해줄게 없다.
- 이를 방지하기 위한 계층이 전송계층이다.
- 신뢰성 있는 데이터 전달 을 위해 필요하다.
- 오류 점검 기능
- 오류 발생시 데이터 재전송하도록 요청
- 식별 기능
- 전송된 데이터의 목적지가 어떤 애플리케이션인지 식별 가능
- 예를 들어, 웹에서 사용된다고 명시되어 있는 패킷을 메일 프로그램에 전달하는 것을 방지한다.
연결형 통신 / 비연결형 통신
- 전송 계층의 특징
- 신뢰성, 정확성
- 데이터를 목적지에 문제 없이 전달하는 것 -> 연결성 통신(TCP)
- 효율성
- 빠르고 효율적으로 전달 -> 비 연결형 통신(UDP)
- 스트리밍
- 신뢰성, 정확성
TCP
- 이 계층에서도 TCP 헤더를 붙여 세그먼트(Segment)를 만드는 캡슐화를 진행한다.
TCP 헤더
- 연결형 통신에 사용
- 연결이라는 통신로를 확보해야 한다.
- 가상의 통신로
- 연결을 확립하기 위해서는 TCP 헤더의 코드 비트를 확인해야 한다.
- 코드 비트는 연결의 제어 정보가 기록되는 곳이다.
- 코드 비트의 종류
- SYN
- ACK
- FIN
- etc
코드 비트
3 Way Hand shake
3way handshake
- 통신 전에 컴퓨터 2에게 허락을 받는다. 연결 확립 허가를 위한 요청(SYN)을 보낸다.
- 컴퓨터 2는 1의 요청을 받은 후, 허가한다는 응답을 회신한다. (ACK) 마찬가지로 컴퓨터 1에게 데이터 전송 허가를 받기 위해 연결 확립 요청을 보낸다.(SYN)
- 컴퓨터 2의 요청에 대해 1은 허가한다는 응답으로 ACK를 보낸다.
이렇게 연결 확립을 위해 패킷 요청을 3번 교환하는 것을 3-way hankshake 라 한다.
4 way handshake
4 way handshake
- 컴퓨터 1에서 2로 연결 종료 요청을 보낸다.(FIN)
- 2에서 1로 연결 종료 응답을 보낸다.(ACK)
- 2에서도 1로 연결 종료 요쳥을 보낸다.(FIN)
- 1에서 2로 연결 종료 응답을 반환한다.(ACK)
일련번호와 확인 응답 번호
TCP 헤더
- 이제 연결은 되었고, 실제 데이터를 보내고 받아야 한다.
- 이 때는 TCP 헤더의 일련 번호와 응답 번호를 사용한다.
- TCP는 데이터를 분할해서 보내는데, 일련번호는 송신측에서 수신측에 이 데이터가 몇번째 데이터 인지 알려주는 역할을 한다.
- 확인 응답 번호는 수신측이 몇번째 데이터를 수신했는지 알려주는 역할을 한다.
- 이 번호를 가지고 다음 번호의 데이터를 요청하는데 사용한다.
- 만약 10번을 수신했다면, 다시 송신측에 11번을 달라고 요청한다.
실제 통신 과정
- 컴퓨터 1이 2한테 200바이트 데이터를 전송
- 2는 200바이트 수신 후에 다음 수신 데이터 번호를 확인응답번호에 넣는다.
- 3001 + 200 = 3201이니 이 데이터를 요청한다.
- 1은 2로 다시 3201부터 200 바이트의 데이터를 전송한다.
- 2는 200바이트를 수신하고 다음 수신 데이터를 번호에 넣는다.
이러한 방법을 반복하게 된다. 데이터가 항상 올바르게 전달되지는 않으므로 이 두개의 값을 사용해서 손실되거나 유실된 경우, 다시 재전송하게 되어 있다. 이를 재전송 제어 라고 한다.