Port
Port란, 논리적인 접속 장소를 의미합니다. TCP/IP를 사용할때 클라이언트가 네트워크 상에서의 특정 서버 프로그램을 지정하여 사용합니다.
IP : 컴퓨터를 찾을 때 필요한 주소
Port : 그 컴퓨터 안에서 연결하고자 하는 프로그램을 찾기위한 수단.
- 각각의 응용프로그램은 정해져있는 포트 번호를 이용합니다. 이 포트 번호를 전송 계층에서 이용하여 프로그램을 구분 합니다.
Well Known Port
서버 측에서 용도별로 포트번호를 정해서 동작되고 있고 클라이언트가 이 포트번호를 이용하여 접속합니다.
이러한 포트를 Well Known Port(잘 알려진 포트) 라고 합니다.
1~1023번 까지존재하고 이미 예약되어있습니다.
종류
- 1 : TCP Port Service Multiplexer
- 7 : ECHO (echo)
- 13 : DAYTIME
- 21 : FTP(File Transfer Protocal) : 파일 전송 프로토콜
- 22 : SSH(Secure Shell) : 다른 사용자가 세션을 접근하지 못하도록 세션을 보안
- 25 : SMTP : 메일 메시지 전송 프로토콜
- 53 : DNS : 영문이나 한글 주소를 네트워크에서 찾아갈 수 있는 IP로 변환
- 80 : HTTP : 웹전송
- 123 : NTP(Network Time Protocol)
HTTP(Hyper-Text Transfer Protocol)
HTTP란, 웹 상에서 웹 서버와 웹 브라우저 사이에 데이터 전송을 위한 응용계층 프로토콜
과거에는 문서(하이퍼텍스트 문서)의 형태만 전달하는데 사용되었지만 현재는 이미지, 비디오 음성 등 모든 데이터 전송이 가능합니다.
추가로 웹뿐만아니라 모바일, IoT와 같은 통신에도 사용됩니다.
특징
- 요청과 응답 구조
- 서버에게 요청을 보내는 클라이언트
- 클라이언트로 부터 요청을 받아 응답하는 서버
- 메시지 교환 프로토콜
- 클라이언트와 서버간의 HTTP 메시지를 주고받으면서 통신합니다.
- 이는 SMTP 방식과 유사합니다.
- 트랜잭선 중심의 비연결성 프로톹콜
- 서버가 응답한 후에는 연결이 끊어집니다. -> 비연결성(Connectionless)
- 서로의 요청과 응답 사이에 어떤 상태나 데이터를 유지하지 않습니다 -> 무상태(Stateless)
- 일반적으로 안전한 TCP/IP를 기반으로 합니다.
- 포트번호 : 80
- 암호화에 대해 부족한 문제가 있었지만 이를 해결하기 위해 HTTPS가 등장했다.
HTTP는 TCP/IP 프로토콜 위에서 동작합니다.
HTTP는 데이터 교환을 위해 사용되고 TCP는 데이터 전송을 위해 사용됩니다.
동작과정
서버의 서비스를 필요로하는 사용자가 브라우저를 통해 URI로 서버에게 요청하면 서버는 그에 대한 결과를 응답
- TCP Connection
- 서버에 접속하기 위해 TCP 연결합니다.
- TCP 연결을 요청을 보내거나 응답을 받는데 사용됩니다.
- 서버에 대한 여러 TCP 연결을 열 수 있습니다.
- HTTP 메시지 전송(요청)
- 서버로부터 응답을 확인(응답)
- TCP 연결을 끊거나 다른 요청을 위해 재사용합니다.
HTTP Message
요청

구조
- HTTP Method와 Path, 프로토콜 종류와 버전이 존재
- HTTP Header와 리소스를 요청하는 경로(어디서 보냇는지) 존재
HTTP Method
- GET: 클라이언트가 서버에 리소스를 요청할 때.
- POST: 클라이언트가 서버의 리소스를 새로 만들 때.
- PUT: 클라이언트가 서버의 리소스를 수정할 때.
- DELETE: 클라이언트가 서버의 리소스를 삭제할 때.
응답

구조
- 프로토콜 종류, 버전, HTTP 상태코드(요청과 응답에 대한 결과를 나타내는 코드), HTTP 상태 메시지(요청과 응답해 대한 결과를 나태내는 문구)
- HTTP 응답 Header(응답에 대한 정보들을 저장)
- 응답할 데이터가 존재할때에는 Http body에 저장한다.
HTTP 상태 코드
- 1xx : 정보, 요청을 받았고 계속 진행중
- 2xx : 성공 : 요청이 성공적
- 3xx : 리다이렉션 : 요청 완료를 위해 추가 조치 필요
- 4xx : 클라이언트 오류 : 요청중 에러 밟생
- 5xx : 서버 오류 : 서버에서 에러 발생
HTTPS (Hyper-Text Transfer Protocol Secure)
이름 그대로 HTTP에 암호화가 추가된 프로토콜입니다.
인터넷 상에서 정보를 암호화하는 SSL 프로토콜(또는 TLS)을 이용하여 클라이언트와 서버가 통신하는 프로토콜
TLS : Transport Layer Security 프로토콜
- 공개키 암호화 방식을 사용
- 포트번호 443
- HTTP에 비해 속도가 느리다(요즘은 큰차이가 없다)
- 암호화를 진행하는데 추가 비용이 발생한다(인증서 발급)
- 검색엔지니에 최적화가 되어있습니다.
동작방식
- 클라이언트는 서버에게 HTTPS 요청을 합니다.
- 서버의 SSL/TLS 인증서를 확인하고, 암호화 알고리즘과 암호화 키를 협상합니다.
- 이 과정을 SSL/TLS 핸드셰이킹이라고 합니다.
- 클라이언트는 협상된 알고리즘와 암호화 키로 데이터를 암호화 해서 전달합니다.
- 서버는 클라이언트의 요청을 처리하고, 암호화된 데이터를 응답합니다.
- 클라이언트는 응답을 받고 복호화 하여 응답 페이지를 렌더링 합니다.
세부적인 과정
✅ ① 클라이언트 → 서버 : "안녕? 나 이런 거 쓸 수 있어!"
- 클라이언트가 서버에 접속하면서 Client Hello 메시지 전송
- 암호화 버전, 알고리즘, 압축 방식 정보를 전달
- 내가 할 수 있는 것들 리스트를 알려줌
✅ ② 서버 → 클라이언트 : "좋아, 그럼 이걸로 하자!" + "이건 내 신분증이야."
- 서버가 Server Hello로 응답
- 클라이언트가 보낸 리스트 중 사용할 암호화 방식 선택
- 인증서(CA 인증서)를 클라이언트에게 전달
- 이 인증서 안에 서버의 공개키 포함
- 이 공개키는 나중에 대칭키를 안전하게 주고받기 위해 사용
✅ ③ 클라이언트 : "음, 인증서 믿을 수 있나?"
- 클라이언트가 인증서를 검증
- 브라우저에 저장된 CA 목록의 공개키로 검증
- DigiCert 등에서 발급된 진짜 인증서인지 확인
✅ ④ 클라이언트 → 서버 : "자, 이건 대칭키 만들 재료야!"
- 클라이언트가 무작위 값을 생성
- 서버의 공개키로 암호화해 전송
- 이 값은 서버와 클라이언트만 아는 대칭키(세션키)를 만드는 재료
✅ (옵션) 클라이언트 인증서 요구 시
- 서버가 클라이언트 인증서를 요구할 수 있음
- 클라이언트가 자신의 인증서를 전송
- 클라이언트가 개인키로 확인용 값을 암호화해 전송
- 서버가 클라이언트의 신원을 검증
✅ ⑤ 서버 : "좋아, 난 너가 준 값으로 대칭키를 만들었어."
- 서버가 자신의 비밀키로 무작위 값을 복호화
- 클라이언트와 동일한 대칭키(세션키)를 생성
- 서버와 클라이언트가 동일한 대칭키를 가지게 됨
✅ ⑥ 클라이언트 → 서버 : "이제 우리 대화 잘 됐는지 확인하자!"
- 클라이언트가 지금까지 교환한 내용을 해시 처리
- 대칭키로 암호화해 서버로 전송 (Finished 메시지)
✅ ⑦ 서버 : "나도 해봤는데 맞네!"
- 서버도 같은 방식으로 해시를 계산
- 클라이언트가 보낸 값과 비교해 일치 여부 확인
- 서버도 Finished 메시지를 전송해 연결 완료 알림
✅ ⑧ 이후부터
- 서버와 클라이언트는 동일한 대칭키로 안전하게 통신
- 모든 데이터는 대칭키로 암호화해 송수신
✅ 최종 정리
- ① 서로 능력 소개
- ② 서버가 인증서 제공
- ③ 클라이언트가 인증서 검증
- ④ 대칭키 재료 전달
- ⑤ 서버가 복호화해 대칭키 생성
- ⑥ 서로 Finished 메시지로 확인
- ⑦ 연결 완료
- ⑧ 대칭키로 안전하게 통신