[모두의 네트워크]6장 전송 계층
전송 계층의 역할
- 목적지에 신뢰할 수 있는 데이터를 순차적으로 전달
- 상위 계층이 데이터 전달의 유효성이나 효율성을 신경 쓰지 않아도 된다.
- 오류를 점검
- 데이터의 중복이나 누락, 순서를 점검
- 전송된 데이터의 목적지가 어떤 애플리케이션인지 식별하는 기능
연결형 통신과 비연결형 통신
- 연결형 통신
- 데이터를 교환하기 전 연결을 맺고, 데이터를 교환하는 동안 계속 연결을 관리
- 신뢰성/정확성 우선
- 데이터를 목적지에 문제없이 전달
- 상대와 확인해 가면서 통신
- TCP(Transmission Control Protocol, 전송 제어 프로토콜) 사용
- 비연결형 통신
- 연결에 대한 초기화 과정이 없는 통신
- 일방적으로 데이터 전송
- 예) 스트리밍 방식으로 전송하는 동영상 서비스
- 일방적으로 데이터 전송
- 효율성 우선
- 데이터를 빠르고 효율적으로 전달
- UDP(User Datagram Protocol, 사용자 데이터그램 프로토콜) 사용
- 연결에 대한 초기화 과정이 없는 통신
TCP
- TCP 헤더
- TCP로 전송할 때 붙이는 헤더
- TCP 헤더가 붙은 데이터를 세그먼트라고 한다.
- 출발지 포트 번호(16비트), 목적지 포트 번호(16비트), 일련번호(32비트), 확인 응답 번호(32비트), 헤더 길이(4비트), 예약 영역(6비트), 코드 비트(6비트), 윈도우 크기(16비트), 체크섬(16비트), 긴급 포인터(16비트), 옵션으로 구성
- 연결(connection)
- TCP 통신에서 정보를 전달하기 위해 사용하는 가상의 통신로
- 연결을 확립한 뒤에 데이터를 전송할 수 있다.
연결 확립
- 연결 확립을 위해 코드 비트 사용
- TCP 헤더 107~112번째에 존재하는 6비트
- 연결의 제어 정보 기록
- 비트별로 역할이 있으며 초깃값은 0, 활성화되면 1
- URG, ACK, PSH, RST, SYN, FIN
- SYN: 연결 요청
- ACK: 확인 응답
- FIN: 연결 종료
3-way 핸드셰이크
데이터를 보내기 전에 연결을 확립하기 위해 패킷 요청을 세 번 교환하는 것
- 통신을 위해 컴퓨터 1에서 컴퓨터 2로 연결 확립 허가를 받기 위한 요청(SYN)을 보낸다.
- 코드 비트의 SYN이 1로 활성화
- 컴퓨터 2는 컴퓨터 1이 보낸 요청을 받고, 허가를 위해 연결 확립 응답(ACK)을 보낸다.
- 동시에 컴퓨터 2도 컴퓨터 1에 데이터 전송 허가를 받기 위해 연결 확립 요청(SYN)을 보낸다.
- 코드 비트의 ACK와 SYN이 1로 활성화
- 컴퓨터 2의 요청을 받은 컴퓨터 1은 컴퓨터 2로 허가를 위해 연결 확립 응답(ACK)을 보낸다.
- 코드 비트의 SYN이 1로 활성화
연결 종료
- 컴퓨터 1에서 2로 연결 종료 요청(FIN)을 보낸다.
- 코드 비트의 FIN이 1로 활성화
- 컴퓨터 2에서 1로 연결 종료 응답(ACK)을 반환한다.
- 코드 비트의 ACK이 1로 활성화
- 또한 컴퓨터 2에서 1로 연결 종료 요청(FIN)을 보낸다.
- 코드 비트의 SYN이 1로 활성화
- 컴퓨터 1에서 2로 연결 종료 응답(ACK)을 반환한다.
- 코드 비트의 ACK이 1로 활성화
데이터 송수신
3-way 핸드셰이크가 끝나고 실제 데이터를 송수신 할 때는 TCP 헤더의 일련번호, 확인 응답 번호를 사용한다.
- 일련번호
- TCP가 데이터를 분할해 보내면 수신 측에 데이터가 몇 번째 데이터인지 알려주는 역할
- 데이터에 부여된 고유한 번호
- 이를 이용해 TCP 패킷의 순서 제어 가능
- TCP가 데이터를 분할해 보내면 수신 측에 데이터가 몇 번째 데이터인지 알려주는 역할
- 확인 응답 번호
- 수신 측이 몇 번째 데이터를 수신했는지 송신 측에 알리는 역할
- 요청하는 데이터의 첫 번째 바이트 번호
- 다음 번호 데이터를 요청할 때 사용
- 이를 확인 응답이라 한다.
- 재전송 제어
- 일련번호와 확인 응답 번호를 사용해 데이터가 손상되거나 유실된 경우 데이터를 재전송
윈도우 크기
왜 윈도우 크기가 필요한가?
- 세그먼트 하나를 보낼 때마다 확인 응답을 반환하면 효율이 낮다.
- 연속해서 세그먼트를 보내고 확인 응답을 반환하면 효율이 높아진다.
- 버퍼에는 세그먼트를 일시적으로 보관할 수 있다.
- 데이터 크기가 버퍼 크기를 넘어서면 오버플로가 발생한다.
- 따라서 버퍼의 한계 크기, 즉 윈도우 크기를 알아야 한다.
윈도우 크기
- 확인 응답 없이 연속해서 송수신할 수 있는 데이터의 크기
- 3-way 핸드셰이크를 할 때 초깃값을 판단
- 연결 확립 요청과 응답을 할 때 서로의 윈도우 크기를 함께 전달한다.
- 윈도우 크기를 안다면 윈도우 크기 이내로 세그먼트를 연속적으로 보낼 수 있다.
- 이후 확인 응답도 연속적으로 한꺼번에 온다.
포트 번호
- 컴퓨터가 통신하고자 하는 네트워크 서비스나 특정 서비스를 식별하는 논리 단위
- TCP 헤더의 출발지 포트 번호와 목적지 포트를 통해 데이터가 어느 애플리케이션의 데이터인지 알 수 있다.
- 0~65535번을 사용 가능
- 0~1023번: well-known ports
- 주요 프로토콜이 사용하도록 예약
- 일반적으로 사용하는 서버 측 애플리케이션에서 사용
- 1024번: 예약되어 있지만 사용하지 않음
- 1026~65535번: 랜덤 포트
- 클라이언트 측의 송신 포트로 사용
- 0~1023번: well-known ports
애플리케이션은 각각 포트 번호로 구분 할 수 있다.
애플리케이션 포트 번호 SSH 22 SMTP 25 DNS 53 HTTP 80 POP3 110 HTTPS 443 - 웹 브라우저로 접속할 때 웹 브라우저에는 임의의 포트가 자동으로 할당된다.
- 따라서 클라이언트 측은 포트 번호를 안 정해도 된다.
UDP
- UDP 헤더
- UDP 헤더가 붙은 데이터를 UDP 데이터그램이라고 한다.
- 출발지 포트 번호(16비트), 목적지 포트 번호(16비트), 길이(16비트), 체크섬(16비트)으로 구성
- 브로드캐스트를 통한 일괄 통신 가능
- 랜에 있는 기기에 데이터를 일괄로 보낼 수 있는 기능
This post is licensed under CC BY 4.0 by the author.